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

相关推荐
寺中人8 分钟前
Linux 基础命令入门实战教程:从零掌握常用操作,新手快速上手
linux·运维·服务器·shell·linux 命令·linux 基础教程·linux 入门
小张成长计划..1 小时前
【Linux】18:基础IO
linux·运维·服务器
MIXLLRED1 小时前
解决——Ubuntu远程桌面指令更换网络
linux·网络·ubuntu
C++ 老炮儿的技术栈2 小时前
从 Qt Designer 属性编辑器的层级可以看到继承链
c语言·数据库·c++·qt·sqlite·visual studio
啊哈一半醒2 小时前
Windows 虚拟机搭建 CentOS 全过程(2026 最新版 + 踩坑解决)
linux·windows·centos
wunaiqiezixin2 小时前
MIT 6.S081 lazy 前置篇(lab5):缺页异常、惰性分配、写时复制、页面换出
linux·unix·os·xv6·mit6.s081
new_zhou2 小时前
C++ 项目 AI 协作指南(Windows / MSVC 环境)
c++·人工智能·windows
Benszen2 小时前
云计算基础-13:Linux网络管理实战-1
linux·运维·云计算
_kerneler3 小时前
Linux tiny RCU
linux
水饺编程3 小时前
AT&T 汇编语言学习笔记开篇语
c语言·汇编·c++