当前位置: 首页 > 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];}
};

相关文章:

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

文章目录 一、LoopThreadPool模块二、实现思想&#xff08;一&#xff09;功能&#xff08;二&#xff09;意义&#xff08;三&#xff09;功能设计 三、代码 一、LoopThreadPool模块 1.线程数量可配置&#xff08;0或多个&#xff09; 2. 对所有的线程进行管理&#xff0c;其…...

SpringBoot介绍

一、什么是SpringBoot 在使用传统的Spring去做Java EE&#xff08;Java Enterprise Edition&#xff09;开发中&#xff0c;大量的 XML 文件存在于项目之中&#xff0c;导致JavaEE项目变得慢慢笨重起来&#xff0c;繁琐的配置和整合第三方框架的配置&#xff0c;导致了开发和部…...

2022最新版-李宏毅机器学习深度学习课程-P17 卷积神经网络CNN

一、CNN 用于图像分类 需要图片大小统一 彩色图像分为R G B 三层&#xff0c;展平后首尾相接 值代表着颜色的强度 图像识别中不需要全连接的&#xff0c;参数太多了 观测1&#xff1a;通过判断多个小局部图像就能判断出图片标签 感受野的定义 简化1 感受野可以重叠&#xff…...

微博清理僵尸粉

1.选择chrome或者firefox浏览器 2.登陆微博账号 3.chrome右键点检查&#xff0c;选择console firefox右键点检查&#xff0c;选择控制台 4.粘贴下面代码到console或者控制台并且回车 let removeTargetFans false; /*是否删除符合条件的粉丝&#xff0c;默认关闭*/let dee…...

创建React Native的第一个hello world工程

创建React Native的第一个hello world工程 需要安装好node、npm环境 如果之前没有安装过react-native-cli脚手架的&#xff0c;可以按照下述步骤直接安装。如果已经安装过的&#xff0c;但是在使用这个脚手架初始化工程的时候遇到下述报错的话 cli.init(root, projectname);…...

基础课3——自然语言处理的应用

自然语言处理是一种将人类语言转换为机器语言&#xff0c;以实现人机交互的技术。应用非常广泛&#xff0c;例如&#xff1a; 人机交互&#xff1a;自然语言处理技术可以应用于人机交互&#xff0c;让机器能够理解和运用人类语言&#xff0c;从而实现更加智能化的交互体验。 机…...

理解 Git 的三个工作区:工作区、暂存区和版本库

文章目录 创建 Git 本地仓库配置Git认识⼯作区、暂存区、版本库添加⽂件--场景查看 .git ⽂件添加⽂件--场景⼆ 创建 Git 本地仓库 要提前说的是&#xff0c;仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制&#xff0c;就必须先创建⼀个仓库出来。创建⼀个 Gi…...

web前端基础训练-----创建用户反馈表单

1&#xff0c;实验代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>用户反馈表单</title></head><body><form><fieldset><h1>用户反馈</h1><hr/><h4>亲爱的用…...

Scrum 敏捷管理流程图及敏捷管理工具

​敏捷开发中的Scrum流程通常可以用一个简单的流程图来表示&#xff0c;以便更清晰地展示Scrum框架的各个阶段和活动。以下是一个常见的Scrum流程图示例&#xff1a; 转自&#xff1a;Leangoo.com 免费敏捷工具 这个流程图涵盖了Scrum框架的主要阶段和活动&#xff0c;其中包括…...

Android Handler/Looper视角看UI线程的原理

概述 Handler/Looper机制是android系统非重要且基础的机制&#xff0c;即使在rtos或者linux操作系统上开发应用框架时&#xff0c;也经常借鉴这个机制。通过该机制机制可以让一个线程循环处理事件&#xff0c;事件处理逻辑即在Handler的handleMessge种。本文建议android8.1源码…...

【网络】网络入门

网络入门 一、网络发展二、网络协议初识1、认识"协议"2、协议分层3、OSI七层模型4、TCP/IP五层(或四层)模型 三、网络传输基本流程1、同局域网的两台主机通信2、跨网络的两台主机通信 四、网络中的地址管理1、IP地址2、认识MAC地址 一、网络发展 独立模式&#xff1a…...

GO-实现简单文本格式 文本字体颜色、大小、突出

毫无疑问GO的生态就是一坨大便。老子英文水平小学啊。 实现简单文本格式 文本字体颜色、大小、突出显示等。 创建要给docx文件容器【我估算的】 doc : document.New() defer doc.Close() doc.SaveToFile("simple.docx") 把容器保存为文件 设置标题 创建自然段…...

铅华洗尽,粉黛不施,人工智能AI基于ProPainter技术去除图片以及视频水印(Python3.10)

视频以及图片修复技术是一项具有挑战性的AI视觉任务&#xff0c;它涉及在视频或者图片序列中填补缺失或损坏的区域&#xff0c;同时保持空间和时间的连贯性。该技术在视频补全、对象移除、视频恢复等领域有广泛应用。近年来&#xff0c;两种突出的方案在视频修复中崭露头角&…...

latex,不带行号的algorithm

\usepackage{algorithm,algorithmic}\begin{algorithm} \caption{The Example Algorithm} \label{alg123} \begin{algorithmic} \STATE{\textbf{Input:} ...} \STATE{\textbf{Output:} ...} \IF{...} \STATE{...} \ENDIF \RETURN{...} \end{algorithmic} \end{algorithm}...

RocketMQ高性能核心原理与源码架构剖析

文章目录 一、源码环境搭建主要功能模块源码启动服务启动nameServer启动Broker发送消息消费消息 二、源码热身阶段NameServer的启动过程关注重点源码重点 Broker服务启动过程关注重点源码重点 Netty服务注册框架关注重点源码重点关于RocketMQ的同步结果推送与异步结果推送 Brok…...

MATLAB中zp2tf函数用法

目录 语法 说明 示例 质点弹簧系统的传递函数 zp2tf函数的功能是将零极点增益滤波器参数转换为传递函数形式。。 语法 [b,a] zp2tf(z,p,k) 说明 [b, a] zp2tf(z, p, k) 将一个分解的传递函数表示方式转换。 将单输入/多输出&#xff08;SIMO&#xff09;系统的多输出…...

解决:uniapp项目中调用小程序的chooseAddress() API失效

目录 问题描述 解决方案 问题描述 使用 Hbuilder X 编辑器和 uni-app 框架开发小程序项目&#xff0c;在调用小程序提供的 uni.chooseAddress() API实现选择收货地址的功能时&#xff0c;点击选择收货地址没有反应&#xff0c;获取不到用户收货地址&#xff0c;API失效了 …...

2023 项目组总结(待完善)

2023 项目组总结 目录概述需求&#xff1a; 设计思路实现思路分析1.JA项目2.XC项目3.XL 项目4.tydic 项目 总结 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better re…...

Chrome浏览器 键盘快捷键整理

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 〇、前言一、常用快捷键二、分类型快捷键表&#xff08;…...

【JAVA】集合与背后的逻辑框架,包装类,List,Map,Set,静态内部类

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 collectionCollection创建collection使用泛型collection方法 Map 接口Map的存储结构HashMap和Tr…...

3步精通Calibre电子书转换:从格式兼容到专业排版指南

3步精通Calibre电子书转换&#xff1a;从格式兼容到专业排版指南 【免费下载链接】calibre The official source code repository for the calibre ebook manager 项目地址: https://gitcode.com/GitHub_Trending/ca/calibre 在数字阅读时代&#xff0c;电子书格式碎片化…...

基于麻雀优化算法(SSA)优化shared TCN-Transformer模型超参数,实现时间...

基于麻雀优化算法&#xff08;SSA&#xff09;优化shared TCN-Transformer模型超参数&#xff0c;实现时间序列预测。[1]模型采用共享TCN结构&#xff0c;用于提取Encoder Embedding和Decoder Embedding 的因果特征&#xff0c;在尽可能保证模型复杂度不变的情况下&#xff0c;…...

三相三电平Vienna整流器:SPWM与SVPWM调制仿真及控制策略对比分析

三相三电平vienna整流器SPWM和SVPWM调制仿真 基于plecs搭建 温度场分析 双PI控制 锁相环控制 中点电压平衡控制 功率因数为1 SPWM和SVPWM调制对比 谐波畸变率对比分析 电压利用率对比分析 电压平衡和不平衡控制对比 图1 仿真模型 图2 温度场分析 图3 交流电压电流三电平…...

C# 核心技术解析:Parse vs TryParse 实战指南

文章目录1. 核心区别&#xff1a;暴力型 vs. 稳重型Parse: 默认数据正确TryParse: 典型的 C# 模式示例2. 执行流程图3. 性能4. 高性能方案4.1. 高性能转换&#xff1a;Span<char> 与 Utf8Parser4.2. 执行流程&#xff1a;内存视角4.3. 类型转换对比5. 易混淆在 C# 处理字…...

多角色语音合成解决方案:Chatterbox技术实现与应用指南

多角色语音合成解决方案&#xff1a;Chatterbox技术实现与应用指南 【免费下载链接】chatterbox Open source TTS model 项目地址: https://gitcode.com/GitHub_Trending/chatterbox7/chatterbox 在数字化内容创作与智能交互领域&#xff0c;语音合成技术正经历从单一语…...

DB2数据迁移实战:除了EXPORT/LOAD,这几种备份还原方法你试过吗?

DB2数据迁移实战&#xff1a;超越基础工具的高效策略全景 当测试环境的DB2数据库需要整体搬迁到新服务器时&#xff0c;大多数DBA的第一反应是使用EXPORT/LOAD这对经典组合。但真实场景中&#xff0c;数据迁移远不止简单的导出导入——表结构依赖、CLOB字段处理、编码转换、存储…...

变压器差动保护MATLAB/simulink仿真 变压器差动保护仿真➕报告

变压器差动保护MATLAB/simulink仿真 变压器差动保护仿真➕报告第一部分&#xff1a;Simulink 仿真模型搭建指南 以下是变压器差动保护的Simulink模型搭建步骤及核心代码&#xff0c;包含模型参数设置、差动逻辑实现和仿真分析&#xff1a; 一、Simulink模型搭建 打开MATLAB&…...

SMUDebugTool终极指南:快速掌握AMD Ryzen系统调试与优化技巧

SMUDebugTool终极指南&#xff1a;快速掌握AMD Ryzen系统调试与优化技巧 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...

Rockchip Android 12编译踩坑记:手把手教你修改BoardConfig.mk生成userdata.img

Rockchip Android 12编译实战&#xff1a;从BoardConfig.mk修改到userdata.img生成的避坑指南 第一次在Rockchip平台上编译Android 12系统时&#xff0c;我遇到了一个令人抓狂的问题——编译过程看似顺利&#xff0c;但生成的固件烧写到设备后&#xff0c;系统始终无法正常启动…...

Android WebView视频播放全屏实战:从黑屏到完美适配的完整解决方案

Android WebView视频全屏播放的深度优化指南&#xff1a;从黑屏修复到多机型适配 当你在WebView中嵌入视频播放功能时&#xff0c;是否遇到过这样的场景&#xff1a;用户点击全屏按钮后画面突然黑屏&#xff0c;或者在某些机型上视频声音无法正常停止&#xff1f;这些问题往往…...