本文地址: https://blog.csdn.net/Mr_scott_j/article/details/111172724
EventLoopThreadPool也是派生自noncopyable,
用于创建IO线程池,用于把TcpConnection分派到某个具体的EventLoop线程上。EventLoopThreadPool是TcpServer的成员,生命周期由后者控制。
EventLoop应该比较熟悉,就是整个muduo库的核心,就是Reactor模式当中的Dispatcher(事件分发器),具体至EventLoop章节进行详细分析。
EventLoopThread启动了一个线程,并在其中运行EventLoop::loop(),实际上就是对实I/O线程的封装,亦不在此节详细说明。
muduo网络库的作者陈硕在书中提到,muduo的网络库的并发模型为one loop per thread+ threadpool模型。 每个线程最多有一个EventLoop,每个TcpConnection必须归某个EventLoop管理,所有的IO会转移到这个线程。TcpConnection所属的线程由其所属的EventLoop来决定。
为什么先选择EventLoopThreadPool类来进行剖析呢,因为其实这里就是多Reactor/多线程模式的实现(注:单Reactor时只需将numThreads_设置为0)。
EventLoopThreadPool接口如下:
其实只需关注start()、getNextLoop();
class EventLoopThreadPool : noncopyable
{
public:
typedef std::function<void(EventLoop*)> ThreadInitCallback;
EventLoopThreadPool(EventLoop* baseLoop, const string& nameArg);