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

相关推荐
承渊政道1 分钟前
Linux网络学习【数据链路层、ARP工作过程与ARP欺骗详解】
linux·网络·学习·数据链路层·arp
CS_Zero8 分钟前
安卓开发:Linux的android工具命令
android·linux·运维
ShineWinsu18 分钟前
对于Qt:QProgressBar常见属性的解析
开发语言·c++·qt·进度条·gui·定时器·qprogressbar
女神下凡23 分钟前
芯参谋(84):Linux eMMC 驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件
ShineWinsu29 分钟前
对于Qt:QLCDNumber常见属性以及QTimer的解析
服务器·数据库·c++·qt·gui·qtimer·qlcdnumber
xiaoye-duck36 分钟前
《C++ 工具库实战》C++ 解析利器 JsonCpp:从基础使用到封装简易 JSON 工具
c++·json·第三方库
dialect_9 小时前
KMP算法
开发语言·c++·算法
无足鸟ICT9 小时前
【RHCA+】vmstat命令(监控系统资源)
linux·服务器
闪亮的路灯10 小时前
Linux 安装mqtt服务mosquitto
linux·运维·服务器
HideF10 小时前
nmcli
linux·服务器·网络