当前位置: 首页 > 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];}
};
http://www.lryc.cn/news/195621.html

相关文章:

  • SpringBoot介绍
  • 2022最新版-李宏毅机器学习深度学习课程-P17 卷积神经网络CNN
  • 微博清理僵尸粉
  • 创建React Native的第一个hello world工程
  • 基础课3——自然语言处理的应用
  • 理解 Git 的三个工作区:工作区、暂存区和版本库
  • web前端基础训练-----创建用户反馈表单
  • Scrum 敏捷管理流程图及敏捷管理工具
  • Android Handler/Looper视角看UI线程的原理
  • 【网络】网络入门
  • GO-实现简单文本格式 文本字体颜色、大小、突出
  • 铅华洗尽,粉黛不施,人工智能AI基于ProPainter技术去除图片以及视频水印(Python3.10)
  • latex,不带行号的algorithm
  • RocketMQ高性能核心原理与源码架构剖析
  • MATLAB中zp2tf函数用法
  • 解决:uniapp项目中调用小程序的chooseAddress() API失效
  • 2023 项目组总结(待完善)
  • Chrome浏览器 键盘快捷键整理
  • 【JAVA】集合与背后的逻辑框架,包装类,List,Map,Set,静态内部类
  • mac电脑版数字图像处理软件:ACDSee Photo Studio 9最新 for Mac
  • 酷开系统 | 酷开科技让你放肆嗨唱,聆听内心最真实的声音
  • PC电脑 VMware安装的linux CentOs7如何扩容磁盘?
  • redis极速的奥秘
  • three.js之初识three.js
  • 二维码智慧门牌管理系统:地址管理的现代革命
  • BricsCAD 23 for Mac:轻松驾驭CAD建模的强大工具
  • 如何利用Web应用防火墙应对未知威胁
  • 四、多线程服务器
  • 基于vue实现滑块动画效果
  • 探寻蓝牙的未来:从蓝牙1.0到蓝牙5.4,如何引领无线连接革命?