Phase 4:业务线程池 — IO/计算解耦

问题:Muduo 的 4 个 IO 线程负责所有 onMessage 回调。如果在 IO 线程里直接执行 MySQL 查询(可能耗时 50-200ms),会阻塞事件循环,其他连接的 TCP 事件无法处理。

第 15 步:同步队列

文件:include/server/threadpool/syncQueue_2.hpp

双条件变量是关键------notEmpty 和 notFull 分别让生产者和消费者精确等待,避免虚假唤醒。

第 16 步:FixedThreadPool

文件:include/server/threadpool/FixedThreadPool.hpp

packaged_task + future 是关键------业务代码可以通过 future.get() 同步等待任务执行结果。

第 17 步:dispatch() 统一调度

在 ChatService 中添加 dispatch 模板和 setThreadPool:

runInLoop 的作用:Muduo 要求只能在 IO 线程中操作 TcpConnection。业务线程完成后必须把 send 操作"投递"回 IO 线程执行。

第 18 步:main.cpp 支持 --no-pool

相关推荐
敖行客 Allthinker1 小时前
Parallels Ubuntu虚拟机项目如何让手机访问?完整解决方案
linux·运维·ubuntu
王维同学2 小时前
[自学][Windows C++]RunOnceEx 注册表分组键的安全遍历
c++·windows·安全·开源
keyipatience2 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
j7~2 小时前
【Linux】二十二.《Linux 信号机制完全指南:表示、捕捉与处理》
linux·信号处理·volatile·可入重函数·保存信号
Scott9999HH3 小时前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
脱胎换骨-军哥3 小时前
C++/Rust无缝互操作:混合系统新常态
开发语言·c++·rust
观山岳五楼3 小时前
Ubuntu 24 怎么使用Ubuntu 20 的镜像源
linux·运维·ubuntu
m0_715646764 小时前
20260720
linux·arm
寒晓星4 小时前
[linux]线程及多线程
linux·运维
辰痕~4 小时前
物理机装Linux操作系统(Ubuntu为例)
linux·ubuntu