muduo库的线程池ThreadPool剖析

EventLoopThreadPool也是派生自noncopyable,其用于创建IO线程池,用于把TcpConnection分派到某个具体的EventLoop线程上。EventLoopThreadPool是TcpServer的成员,生命周期由后者控制。EventLoop我们应该很熟悉,也就是整个muduo库的核心,就是Reactor模式当中的Dispatcher(事件分发器),具体至EventLoop章节进行详细分析。
摘要由CSDN通过智能技术生成

本文地址: 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);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值