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

ZLToolKit 源码分析(四):TaskExecutor 与 WorkThreadPool 任务调度

上篇分析了 ThreadPool 的底层实现,本文聚焦上层调度:TaskExecutorGetterImp 的负载均衡策略、WorkThreadPool 的双池设计,以及 ZLToolKit 如何实现"IO 线程"与"工作线程"的职责分离。

1. 线程池体系总览

TaskExecutorInterface (接口) └─ TaskExecutor (CPU 负载 + thread_local) ├─ ThreadPool (基础线程池) │ └─ EventPoller (IO 事件轮询) │ └─ EventPollerPool (IO 线程池单例) └─ WorkThreadPool (工作线程池单例)

ZLToolKit 将线程分为两类:

线程类型职责数量
IO 线程EventPollerPoolepoll 事件循环、Socket 读写CPU 核数
Worker 线程WorkThreadPool耗时计算、协议解析、媒体处理CPU 核数

2. TaskExecutorGetterImp — 执行器获取器

2.1 核心接口

classTaskExecutorGetterImp{public:// 获取第一个执行器TaskExecutor::PtrgetFirstExecutor();// 获取负载最低的执行器(轮转 + 负载加权)TaskExecutor::PtrgetExecutor();// 获取执行器数量size_tgetExecutorSize()const;// 遍历所有执行器voidforEach(constfunction<void(constTaskExecutor::Ptr&)>&cb);protected:vector<TaskExecutor::Ptr>_executors;atomic<size_t>_loop_index{0};};

2.2 getExecutor — 负载均衡算法

TaskExecutor::PtrTaskExecutorGetterImp::getExecutor(){autosize=_executors.size();if(size==0)returnnullptr;if(size==1)return_executors[0];// 策略:轮转 + 负载均衡// 1. 从轮转位置开始// 2. 找到负载最低的执行器// 3. 如果有负载为 0 的,直接返回(无锁快速路径)TaskExecutor::Ptr executor_min_load;floatmin_load=1.0f;for(size_t i=0;i<size;++i){autoidx=(_loop_index++)%size;auto&executor=_executors[idx];autoload=executor->
http://www.jsqmd.com/news/934841/

相关文章:

  • 鹰潭市黄金回收铂金回收白银回收彩金回收店铺TOP5实力权威排行榜+联系方式推荐 2026最新诚信优选 - 亦辰小黄鸭
  • IX7008@ACP#8 通道 PCIe 3.0 低功耗交换芯片,迷你主机 TRAE SOLO 稳定扩展
  • Nginx双栈配置实战:让网站同时拥抱IPv4与IPv6访客
  • 2026年6月国内质量流量计厂家十大品牌盘点:谁在真正解决计量难题? - 流量计品牌
  • 电脑硬盘的隐藏的文件夹不见了怎么办,6种恢复方式和视频详解,让你的数据顺利修复!
  • 如何快速掌握BepInEx:游戏模组开发的终极解决方案指南
  • 刷爆朋友圈的 H5!用 Stable Diffusion 动态生成与大模型流式输出(SSE) 的前端落地指南
  • 怎么选择一款合适的四级式电导率设备?哪些厂家值得信赖? - 仪表人小余
  • 告别懵圈!手把手教你用AUTOSAR工具链(ISOLAR/EB Tresos)配置LIN总线通信
  • PyTorch环境下的d2l库安装:从Jupyter Notebook到VSCode的完整配置流程
  • 广州周年庆活动策划哪个有经验
  • 临沧市黄金回收铂金回收白银回收彩金回收店铺TOP5实力权威排行榜+联系方式推荐 2026最新诚信优选 - 亦辰小黄鸭
  • 永州市黄金回收铂金回收白银回收彩金回收店铺TOP5实力权威排行榜+联系方式推荐 2026最新诚信优选 - 亦辰小黄鸭
  • 5分钟实现完全离线的本地语音识别:AnythingLLM隐私优先AI解决方案
  • Windows下免安装的QQ群成员提取与去重小工具(带批量加好友和导出格式自定义)
  • 以太坊中的量子攻击面
  • 告别ntpdate!在Anolis OS上配置chronyd守护进程,实现毫秒级时间同步
  • GitHub中文界面终极方案:轻松掌握全中文GitHub使用体验
  • TOPSIS模型避坑指南:为什么你的评价结果总是不合理?从指标正向化说起
  • 榆林市黄金回收铂金回收白银回收彩金回收店铺TOP5实力权威排行榜+联系方式推荐 2026最新诚信优选 - 亦辰小黄鸭
  • 没有银弹,但有飞轮|运维治理与AI的协同演进
  • 51单片机蜂鸣器音乐播放工程:Keil源码+Proteus仿真一键运行
  • 临汾市黄金回收铂金回收白银回收彩金回收店铺TOP5实力权威排行榜+联系方式推荐 2026最新诚信优选 - 亦辰小黄鸭
  • 从“粗糙”到“精密”:CKKS自举算法的演进史与Meta-BTS的巧妙思路
  • 计算思维:分解、抽象、模式识别与算法设计的核心方法与实践
  • C# 命令行指令 查看二进制文件
  • 别再死记硬背公式了!用Python+TI AWR1843毫米波雷达,5分钟搞懂FMCW测距测速
  • .NET Gadgeteer:模块化硬件与C#编程的快速原型开发框架
  • 大模型Agent的 Meta-Skill(元技能)
  • 玉林市黄金回收铂金回收白银回收彩金回收店铺TOP5实力权威排行榜+联系方式推荐 2026最新诚信优选 - 亦辰小黄鸭