1.12.C++项目:仿muduo库实现并发服务器之LoopThreadPool模块的设计

文章目录

一、LoopThreadPool模块

1.线程数量可配置(0或多个)

  1. 对所有的线程进行管理,其实也就是管理0个或多个LoopThread对象!

  2. 提供线程分配的功能!

二、实现思想

(一)功能

针对LoopThread设计一个线程池,便于管理。

(二)意义

对所有的LoopThread进行分配和管理!

(三)功能设计

1.线程数量可配置(0或多个)

注意事项:在服务器中,主从Reactor模型是 主线程只负责新连接获取,丛书线程负责新连接的事件监控以及处理!因此当前的线程池,有可能从属线程会数量为0,也就是实现单 Reactor服务器,一个线程及负责获取连接以及连接的处理!

  1. 对所有的线程进行管理,其实也就是管理0个或多个LoopThread对象!

  2. 提供线程分配的功能!

当主线程获取了一个链接,需要将新的线程挂到从属线程上进行事件监控以及管理!

假设0个从属线程,则直接分配给主线程的EventLoop,进行处理!

假设有多个丛书线程,则采用RR轮转!(将对应线程的EventLoop获取到,设置给对应的Connection)

三、代码

cpp 复制代码
class LoopThreadPool {
    private:
        int _thread_count;
        int _next_idx;
        EventLoop *_baseloop;
        std::vector<LoopThread*> _threads;
        std::vector<EventLoop *> _loops;
    public:
        LoopThreadPool(EventLoop *baseloop):_thread_count(0), _next_idx(0), _baseloop(baseloop) {}
        void SetThreadCount(int count) { _thread_count = count; }
        void Create() {
            if (_thread_count > 0) {
                _threads.resize(_thread_count);
                _loops.resize(_thread_count);
                for (int i = 0; i < _thread_count; i++) {
                    _threads[i] = new LoopThread();
                    _loops[i] = _threads[i]->GetLoop();
                }
            }
            return ;
        }
        EventLoop *NextLoop() {
            if (_thread_count == 0) {
                return _baseloop;
            }
            _next_idx = (_next_idx + 1) % _thread_count;
            return _loops[_next_idx];
        }
};
相关推荐
GIS数据转换器1 小时前
地下空间综合管廊运营管理平台
大数据·开发语言·人工智能·经验分享·perl
草莓熊Lotso2 小时前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
猿究院_夏燊6 小时前
Spring Bean 生命周期
java·后端·spring
Wang's Blog7 小时前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
信誓旦旦的程序猿7 小时前
【Python量化实战宝典 #08】可转债与债券接口手册:转股价·溢价率·纯债价值(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
砚底藏山河7 小时前
python量化:行情数据回溯
java·开发语言·python·金融·maven
今年下半年7 小时前
AI智能体项目实战记录(02):初始化 Python 项目
开发语言·人工智能·python·fastapi
Jlzn88887 小时前
华东电芯分选通道数怎么配才不堵线
java·人工智能·架构·自动化·制造
Williamtym7 小时前
PickGo Lab实践:用浏览器、Python和MCP串起机器人搬运仿真
开发语言·python·机器人
香吧香8 小时前
GRPC连接机制---长连接分析
java·网络与传输协议