Reactor (Dispatcher)
Reactor 模式主要由 Reactor 和处理资源池这两个核心部分组成,它俩负责的事情如下:
- Reactor 负责监听和分发事件,事件类型包含连接事件、读写事件
- 处理资源池负责处理事件,如 read -> 业务逻辑 -> send
Reactor 模式是灵活多变的,可以应对不同的业务场景,灵活在于:
- Reactor 的数量可以只有一个,也可以有多个;
- 处理资源池可以是单个进程 / 线程,也可以是多个进程 /线程;
将上面的两个因素排列组设一下,理论上就可以有 4 种方案选择:
单 Reactor 单进程 / 线程;

- Reactor 对象的作用是监听和分发事件;
- Acceptor 对象的作用是获取连接;
- Handler 对象的作用是处理业务;
存在的问题:
- 整个进程/线程是阻塞的,如果一个请求的处理耗时过久,那么其他的请求也会受到影响。
单 Reactor 多进程 / 线程;

存在的问题:
- 所有的请求都会经过一个单线程的 Reactor,Reactor 可能成为性能的瓶颈。
多 Reactor 多进程 / 线程;

需要注意的是,负责建立连接的仍然是一个主线程的 Reactor,与单 Reactor 多进程/线程的区别在于实际逻辑的处理的分发交给子 Reactor 进行,而 MainReactor 只负责处理连接。
Proactor

Proactor 模式的工作流程:
- Proactor Initiator 负责创建 Proactor 和 Handler 对象,并将 Proactor 和 Handler 都通过 Asynchronous Operation Processor 注册到内核;
- Asynchronous Operation Processor 负责处理注册请求,并处理 I/O 操作;
- Asynchronous Operation Processor 完成 I/O 操作后通知 Proactor;
- Proactor 根据不同的事件类型回调不同的 Handler 进行业务处理;
- Handler 完成业务处理;