C++ 仿 Muduo 库 #1:架构与 Reactor 模型解析
一、实现目标
本系列旨在通过 C++ 实现一个类似 Muduo 的高并发服务器组件。核心采用 One Thread One Loop 的主从 Reactor 模型,目标是提供一个简洁、高性能的基础设施。
通过这个组件,开发者可以快速搭建高性能的 TCP 或 HTTP 服务器。需要注意的是,当前项目定位为基础组件库,不包含具体业务逻辑,但预留了应用层协议(如 HTTP)的支持接口,方便后续扩展。
二、HTTP 服务器基础
HTTP 是运行在 TCP 之上的应用层协议,遵循简单的请求—响应模式。虽然 HTTP 服务器看起来只是处理文本数据,但其本质依然是 TCP 服务器。区别在于需要在应用层对数据进行格式化的组织与解析。
实现一个 HTTP 服务器的基本流程如下:
- 搭建 TCP 服务器接收客户端连接。
- 按照 HTTP 协议格式解析请求数据,明确客户端意图。
- 根据请求目的提供对应的服务处理。
- 将结果封装为 HTTP 响应格式发送回客户端。
当然,实现一个能跑通的 HTTP 服务器不难,难的是在高并发场景下保持高性能。这也是我们引入 Reactor 模式的初衷。
三、Reactor 模型详解
概念
Reactor 模式是一种事件驱动的处理模式。服务端程序利用 I/O 多路复用统一监听多个输入源,当有事件发生时,将其同步分派给对应的处理线程。它也被称为 Dispatcher 模式,是编写高性能网络服务器的核心技术之一。
简单来说,就是使用 I/O 多路复用统一监听事件,收到事件后分发给处理进程或线程。
分类
1. 单 Reactor 单线程
这种模式下,I/O 多路复用和业务处理都在同一个线程中完成。
- 流程:监控客户端请求 -> 触发事件 -> 处理(新建连接或数据处理)。
- 优点:串行化操作,逻辑简单,无需考虑线程间通信和资源竞争。
- 缺点:无法利用 CPU 多核资源,容易成为性能瓶颈。
- 适用:客户端数量少、处理速度快的场景。

2. 单 Reactor 多线程
为了解决 CPU 利用率问题,引入线程池处理业务。
- 流程:Reactor 线程负责 I/O 监控和连接建立;数据通信请求接收后,分发给 Worker 线程池处理;处理完毕后由 Reactor 线程发送响应。
- 优点:充分利用多核资源,降低耦合度。
- 缺点:多线程共享数据复杂;单个 Reactor 线程在高并发下可能成为瓶颈。

3. 多 Reactor 多线程(主从 Reactor)
这是 Muduo 等主流库采用的模型,进一步解决了单 Reactor 的瓶颈问题。
- 流程:
- :专门处理新连接请求,将新连接分发到子 Reactor。








