📌 一、为什么要有这篇总纲?

很多人学到这里会卡住:

  • epoll 会了,但不知道怎么往工程走
  • Reactor 理解了,但写不出结构
  • 协程听过,但不知道什么时候用

👉 本质问题:

缺少一条“从 demo → 工程 → 架构 → 高级模型”的完整路径

本文目标

帮你建立一条清晰路线:

epoll → Reactor → Connection → 多 Reactor → 协程 → 工程化

并明确:

  • 每一步要做什么
  • 每一步解决什么问题
  • 每一步会达到什么水平
  • 为什么必须按这个顺序走

二、你当前所在位置(非常关键)

你已经完成:

✔ 阻塞 / 非阻塞 IO
✔ epoll
✔ Reactor(单线程)
✔ mini demo

👉 当前模型: epoll → handler(lambda)

👉 问题:

❌ 没有结构
❌ 没有连接对象
❌ 无法扩展
❌ 不具备工程能力

也就是说:

你已经进入了“高并发服务端”的门,但还没有真正把门后的房子搭起来。

三、整体进阶路线(核心)

这一套我最终拆成 6篇,分成三个阶段:

第一阶段:能力拆解(结构 / 并发 / 执行)

这一阶段的目标不是一下子做全,而是先把高并发服务端最核心的三条主线拆开:

  • 结构主线
  • 并发主线
  • 执行主线

这样后面融合的时候,脑子里才不会乱。

① 第一篇:Reactor 工程化(Connection 模型)

当前问题

handlers_[fd] = lambda;

👉 本质是:

函数驱动,而不是对象驱动

✅ 升级目标

fd → Connection对象 → onRead/onWrite/onClose

结构图
fd
↓
Connection
↓
onRead()
onWrite()
onClose()

✅ 要实现什么?
1️⃣ Connection 类
class Connection {
public:
int fd;

void onRead();
void onWrite();
void onClose();
};
2️⃣ Reactor 管理对象

unordered_map<int, Connection*>

这一阶段的本质

从“函数 demo” → “服务骨架”

你会达到的水平

✔ 能写一个“像样的服务端结构”
✔ 能扩展协议 / 日志 / 业务
✔ 理解 Netty / muduo 的基础设计

② 第二篇:多 Reactor + 线程模型

当前问题

单线程 Reactor

👉 问题:

  • CPU 利用率低 ❌
  • handler 阻塞会卡住 ❌
✅ 升级目标
主 Reactor(accept)
↓
子 Reactor(多个线程)
结构图
Main Reactor
↓ accept
Sub Reactor 1(线程1)
Sub Reactor 2(线程2)
Sub Reactor 3(线程3)
✅ 要实现什么?
1️⃣ 主线程只 accept

accept → 分发连接

2️⃣ 每线程一个 epoll

线程1 → epoll1
线程2 → epoll2

3️⃣ 分配策略

轮询 / hash / 最少连接

这一阶段的本质

从“单核模型” → “多核并发架构”

你会达到的水平

✔ 能写高并发服务端
✔ 理解 Nginx / Netty 架构
✔ 真正进入后端架构层

③ 第三篇:Reactor + 协程(执行模型)

当前问题

onRead() → 回调

👉 问题:

  • 回调嵌套 ❌
  • 状态复杂 ❌
✅ 升级目标
auto data = co_await async_read(fd);
process(data);
co_await async_write(fd);

👉 从:回调驱动 ❌

变成:同步写法 + 异步执行 ✔

✅ 要实现什么?
1️⃣ 状态机思维

READ → PROCESS → WRITE

2️⃣ 协程接入

挂起 → epoll → 恢复

这一阶段的本质

从“回调地狱” → “现代异步模型”

你会达到的水平

✔ 理解 Go / Rust async / Netty
✔ 能写现代异步系统
✔ 进入高级工程师层

第二阶段:能力融合(最关键阶段)

如果说前三篇是在“拆解能力”,那从这一阶段开始,就是把前面拆开的东西重新合起来。

也就是:

结构 + 并发 + 执行
真正融合成一套完整高并发模型

④ 第四篇:多 Reactor + 协程(真正的高并发模型)

这篇是整个系列最关键的一篇。

因为前三篇虽然都很重要,但本质上还是拆开的:

  • 第一篇:结构
  • 第二篇:并发
  • 第三篇:执行

第四篇要做的是:

多线程(第二篇)
+
协程(第三篇)
+
Reactor(调度)

✅ 升级目标

Main Reactor(accept)

Sub Reactor(线程)+ 协程

结构图

Main Reactor
↓ accept
Sub Reactor 1(线程1)+ Coroutine
Sub Reactor 2(线程2)+ Coroutine
Sub Reactor 3(线程3)+ Coroutine

这一阶段的本质

从“能力拆解” → “能力合体”

你会达到的水平
  • ✔ 真正理解现代高并发服务端模型
  • ✔ 能把多线程与协程放进同一个架构里
  • ✔ 接近 Go / Netty / Rust async 的核心设计思路

⑤ 第五篇:Connection + 协程(面向对象的异步模型)

如果第四篇解决的是“架构融合”,那第五篇解决的是:

代码组织方式升级

也就是把:

Connection(第一篇)
+ 协程(第三篇)

融合起来。

✅ 升级目标
class Connection {
public:
DetachedTask run();
};
本质变化

从:函数式 handleConnection(fd)

升级到:

对象 + 协程

这一阶段的本质

从“异步函数” → “对象化异步模型”

你会达到的水平
  • ✔ 更像真正框架中的 Connection / Channel 设计
  • ✔ 更容易维护连接状态
  • ✔ 让协程与 Connection 抽象真正融合

第三阶段:工程落地(从能跑到能上线)

前面 1~5 篇,解决的是:

  • 模型是否正确
  • 架构是否清晰
  • 执行是否优雅

但真正的服务端系统,不能只停留在“模型正确”,还必须考虑:

  • 协议问题
  • 缓冲区问题
  • 心跳/超时问题
  • 工程稳定性问题

⑥ 第六篇:工程化落地(协议、缓冲区与超时机制)

这一篇解决的不是“概念”,而是:

如何让这套模型真正接近工程可用


✅ 要做什么?
  • 半包 / 粘包
  • readBuffer / writeBuffer 管理
  • 心跳 / 超时机制
  • 错误处理
  • 关闭策略
这一阶段的本质

从“能跑” → “能上线”

你会达到的水平
  • ✔ 理解真正服务端为什么不能只会 epoll
  • ✔ 能把模型推进到工程层
  • ✔ 建立完整的系统实现闭环

四、完整技术栈模型(终极图)

非阻塞 IO
    ↓
epoll(事件)
    ↓
Reactor(调度)
    ↓
Connection(连接抽象)
    ↓
多 Reactor(并发)
    ↓
协程(执行优化)
    ↓
工程化(协议 / 缓冲区 / 超时)

五、6篇的本质对比(精华)

篇章 本质
① Connection 结构抽象
② 多 Reactor 并发架构
③ 协程 执行模型
④ 多 Reactor + 协程 架构融合
⑤ Connection + 协程 模型优化
⑥ 工程化 实战落地

六、最关键的一句话(必须记住)

你不是在写 socket,而是在搭一个“服务端运行时系统”

七、建议学习顺序(非常重要)

❌ 错误方式

同时学 Reactor + 协程 + 线程池 ❌

👉 结果:全乱

✅ 正确方式

① Connection(结构)
② 多 Reactor(并发)
③ 协程(执行)
④ 融合
⑤ 优化
⑥ 工程化

八、后续文章规划


第一篇

👉 《C++ 服务端进阶(一)—— 从 Reactor 到 Connection:服务骨架设计》


第二篇

👉 《C++ 服务端进阶(二)—— 多 Reactor + 线程模型:高并发架构》


第三篇

👉 《C++ 服务端进阶(三)—— Reactor + 协程:现代异步模型》


第四篇

👉 《C++ 服务端进阶(四)—— 多 Reactor + 协程:真正的高并发模型》


第五篇

👉 《C++ 服务端进阶(五)—— Connection + 协程:面向对象的异步模型》


第六篇

👉 《C++ 服务端进阶(六)—— 工程化落地:协议、缓冲区与超时机制》

总结

你现在已经完成了:

  • IO 模型(epoll)
  • 调度模型(Reactor)

接下来真正要做的是:

  • 抽象(Connection)
  • 并发(多 Reactor)
  • 执行(协程)
  • 融合(多 Reactor + 协程)
  • 优化(Connection + 协程)
  • 落地(协议 / 缓冲区 / 超时)

也就是说,这个系列最终目标不是实现一个 demo,而是:

从 0 搭出一套完整的 C++ 高并发服务端体系

记忆

epoll 是基础
Reactor 是框架
Connection 是骨架
多 Reactor 是架构
协程是执行模型
工程化是落地能力

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐