muduo中Reactor设计模式的实现------eventloop
muduo中的eventloop采用one eventloop per thread设计思想,并明确每个eventloop中注册的回调函数都在eventloop线程中调用
一
eventloop loop()函数运行的时序图
Channel的底层实现存放了用于poll(2)的fd,同时也指定了Channel将作用于的eventloop
二
eventloop中添加了定时器后的时序图
除了定时器功能,muduo还为eventloop添加了一个EventLoop::runInLoop(const Functor & cb)函数,Functor是void()类型的函数回调,该函数保证cb将会在eventloop线程中调用,如果对应线程阻塞在poll(2)系统调用中,该函数会尝试唤醒线程。
三
eventloop中loop()函数的执行顺序图