单线程 Reactor(Redis 就是这种):
一个 Event Loop(epoll_wait):
while (true) {
epoll_wait(); // 等待事件
for (每个事件) {
if (可读) 读取数据 → 处理请求 → 发送响应
if (可写) 继续发送
if (新连接) accept
}
}
优点:没有多线程竞争问题,简单。 缺点:一个请求处理慢了,阻塞所有后续请求。
多线程 Reactor(最常见模型):
Main Reactor(一个线程):
accept 新连接 → 分发给 SubReactor
SubReactor(多个线程,每个一个 epoll):
epoll_wait(该连接) → 读取数据
→ 把解析好的请求提交给 ThreadPool 处理
→ 在工作线程中执行业务逻辑
→ 工作线程完成后,通知 SubReactor 发送响应