美文网首页
folly-EventBase

folly-EventBase

作者: zlcook | 来源:发表于2020-11-16 15:13 被阅读0次

    libevent学习笔记(参考libevent深度剖析)

    • folly::EventBase是基于libevent的event_base实现的。EventBaseBackendEventBaseBackendBase

    • folly::EventBase和线程不是强绑定,当EventBase执行loopXX方法时才会绑定到当前运行的线程: loopBody是每个loopXX方法都需要调用的。

      • folly::EventBase可以从线程池获取(IoThreadPoolExecutor)也可以自己创建,从线程池获取的eventbase。
    • loopXX(loopOnce、loop、loopForever)方法会运行event loop,进程事件的处理。

    • 一个EventBase只会运行在一个线程中。一个线程可以运行多个EventBase.

    • runInEventBaseThread(Func fn) : 在eventbase 线程中运行函数fn。线程安全,调用runInEventBaseThread()时,如果 EventBase loop不是正在运行中,则函数fn将在下一次loop开始时才被运行。如果loop已经运行完了,并且再也没有被重新运行(即再次调用loop函数等),那么在EventBase析构之前,函数fn会被运行。如果同一个线程调用多次runInEventBaseThread添加执行函数,那么这些函数将会被顺序执行。如果多个线程调用runInEventBaseThread添加执行函数,那么这些函数间的运行顺序将不固定。

    • runInEventBaseThreadAndWait: 和runInEventBaseThread类似。运行event base线程,并且等待运行结束。但是当调用者调用该方法时已经在event base 线程中了则会报错(比如:eventbase执行了loop但是还没执行完)。

    • runImmediatelyOrRunInEventBaseThreadAndWait: 和runInEventBaseThreadAndWait类似,但是,当调用者已经在event base 线程中时,就直接运行任务。否则就运行event base,并等待运行结束。

    EvenetBaseManager

    • 管理每个线程的EventBase实例
    • static EventBaseManager* get();: 返回单例
    • getEventBase得到当前线程上的eventBase,如果不存在则创建
    /**
       * Get the EventBase for this thread, or create one if none exists yet.
       *
       * If no EventBase exists for this thread yet, a new one will be created and
       * returned.  May throw std::bad_alloc if allocation fails.
       */
      EventBase* getEventBase() const;
    

    相关文章

      网友评论

          本文标题:folly-EventBase

          本文链接:https://www.haomeiwen.com/subject/auyzlktx.html