当前位置: 首页 > news >正文

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

文章目录

  • 一、LoopThreadPool模块
  • 二、实现思想
    • (一)功能
    • (二)意义
    • (三)功能设计
  • 三、代码

一、LoopThreadPool模块

1.线程数量可配置(0或多个)
2. 对所有的线程进行管理,其实也就是管理0个或多个LoopThread对象!
3. 提供线程分配的功能!

二、实现思想

(一)功能

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

(二)意义

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

(三)功能设计

1.线程数量可配置(0或多个)
注意事项:在服务器中,主从Reactor模型是 主线程只负责新连接获取,丛书线程负责新连接的事件监控以及处理!因此当前的线程池,有可能从属线程会数量为0,也就是实现单 Reactor服务器,一个线程及负责获取连接以及连接的处理!
2. 对所有的线程进行管理,其实也就是管理0个或多个LoopThread对象!
3. 提供线程分配的功能!
当主线程获取了一个链接,需要将新的线程挂到从属线程上进行事件监控以及管理!
假设0个从属线程,则直接分配给主线程的EventLoop,进行处理!
假设有多个丛书线程,则采用RR轮转!(将对应线程的EventLoop获取到,设置给对应的Connection)

三、代码

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];
        }
};

相关文章:

  • PCL点云处理之从两片点云中获取具有匹配关系的同名点对 (二百一十八)
  • 【音视频|ALSA】SS528开发板编译Linux内核ALSA驱动、移植alsa-lib、采集与播放usb耳机声音
  • vsc连接wsl安装vsc时遇到权限问题的解决方案
  • 如何使用ChatPPT生成PPT文档
  • SpringCloud-Gateway
  • LENOVO联想笔记本小新 Pro-14 2021AMD处理器ACH版(82MS)原厂Win10系统
  • ElementUI编辑表格单元格与查看模式切换的应用
  • 算法解析:LeetCode——机器人碰撞和最低票价
  • Qt工具开发,该不该跳槽?
  • Pytorch之MobileViT图像分类
  • 使用PyTorch处理多维特征输入的完美指南
  • hive抽取mysql里的表,如果mysql表没有时间字段如何做增量抽取数据
  • Spring Boot中的异步编程:解决的问题与应用场景
  • 【Java 进阶篇】JavaScript流程控制语句详解
  • 前端--CSS
  • GPU高性能面试-写一个ReduceKernel
  • 微软10月补丁 | 修复103个漏洞,包括2个零日漏洞,13个严重漏洞
  • Google云平台构建数据ETL任务的最佳实践
  • 从零开始学习调用百度地图网页API:一、注册百度地图账号
  • SQL语句-中级
  • 毕赣新作《狂野时代》入围戛纳主竞赛单元,易烊千玺舒淇主演
  • 欧盟公布关税反制清单,瞄准美国飞机、汽车等产品
  • 追光|铁皮房、土操场,这有一座“筑梦”摔跤馆
  • 商务部:中方愿同各国一道加强合作,促进跨境电商健康可持续发展
  • 暴雨及强对流天气黄色预警已发布!南方进入本轮降雨最强时段
  • 高进华“控股”后首份年报出炉,史丹利账上可动资金大幅缩水