muduo源码分析--EventLoopThreadPool类

本文详细分析了muduo库中的EventLoopThreadPool类,它是一个线程池,每个线程包含一个EventLoop。主要接口包括构造函数、setThreadNum、start和getNextLoop。构造函数需要一个EventLoop,setThreadNum设定线程数量,start启动线程,getNextLoop从线程池中获取EventLoop。当numThreads_为0时,直接使用baseloop。回调由EventLoopThreadPool的创建者提供,用于初始化EventLoopThread并传递给baseLoop。EventLoopThreadPool通常由TcpServer持有。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个貌似是个池,池里全是EventLoopThread。貌似很强大
        这个类对外的接口也很简单
        一个构造函数,需要传递的是EventLoop
          一个设置个数的函数 setThreadNum,这个函数好像决定了开启几个EventLoopThread
        一个start  从感觉上来看这个函数是按照numThreads_的数目来开启线程的,EventLoopThreadPool中有一个向量存放着E3ventLoopThread 
           还有一个getNextLoop函数
            这个函数貌似是从EventLoopThread向量中获取合适的EventLoopThread的 。
            但是可怕的是,构造函数需要传递给她的baseLoop_,谁会传递给它呢?还是来规矩,可能EventLoopThreadPool的拥有者传递给它!
        它既然拥有了EventLoopThread,那么EventLoopThread中缺少的回调是够会是它传递呢?
        这里的start函数就是按照numThreads_的数目逐个初始化EventLoopThread(记住每一个EventLoopThread内部都有一个EventLoop处于loop()状态)
        原来将start函数的参数传递给了EventLoopThread作为其内部成员callback_,现在就是EventLoopThreadPool的拥有者给其传递的回调,然后这个回调在传递个EventLoopThread中,同时需要它的拥有者传递baseLoop。
        如果neumThreads_为0,那么不进行线程的初始化,直接将baseloop传递给回调。
        getNextLoop函数从池子中轮询的方式查找从loops_中找到合适的EventLoop.
        简而言之:
        这个类需要三个参数,一个baseloop(它的作用是什么呢,万一用户不准备开启EventLoopThreadPool,如果设置的setNumthread为0,那么传递给的这个eventloop就需要用,那么这个baseloop可以作为一个返回值)
        一个是准备开启EventLoopThread的数目,就是setNumThread函数需要的参数
    ·    另一个就是开启EventLoopThreadPool的回调,就是start需要的回调,这个回调同样也赋值给EventLoopThread
        那么是谁拥有EventLoopThreadPool呢? T   cpServer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值