Reactor模式基本设计思想,简单来讲就是I/O复用结合线程池
Reactor 模式,是指通过一个或多个输入同时传递给服务处理器的服务请求的事件驱动处理模式。
服务端程序处理传入多路请求,并将它们同步分派给请求对应的处理线程,Reactor 模式也叫 Dispatcher 模式。
即 I/O 多路复用统一监听事件,收到事件后分发(Dispatch 给某进程),是编写高性能网络服务器的必备技术之一。 Reactor 模式中有 2 个关键组成:
- 1)Reactor:Reactor 在一个单独的线程中运行,负责监听和分发事件,分发给适当的处理程序来对 IO 事件做出反应。它就像公司的电话接线员,它接听来自客户的电话并将线路转移到适当的联系人;
- 2)Handlers:处理程序执行 I/O 事件要完成的实际事件,类似于客户想要与之交谈的公司中的实际官员。Reactor 通过调度适当的处理程序来响应 I/O 事件,处理程序执行非阻塞操作。
根据 Reactor 的数量和处理资源池线程的数量不同,有 3 种典型的实现:
- 1)单 Reactor 单线程;
- 2)单 Reactor 多线程;
- 3)主从 Reactor 多线程。
3 种模式可以用个比喻来理解:(餐厅常常雇佣接待员负责迎接顾客,当顾客入坐后,侍应生专门为这张桌子服务)
- 1)单 Reactor 单线程,接待员和侍应生是同一个人,全程为顾客服务;
- 2)单 Reactor 多线程,1 个接待员,多个侍应生,接待员只负责接待;
- 3)主从 Reactor 多线程,多个接待员,多个侍应生。
Reactor 模式具有如下的优点:
- 1)响应快,不必为单个同步时间所阻塞,虽然 Reactor 本身依然是同步的;
- 2)编程相对简单,可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程/进程的切换开销;
- 3)可扩展性,可以方便的通过增加 Reactor 实例个数来充分利用 CPU 资源;
- 4)可复用性,Reactor 模型本身与具体事件处理逻辑无关,具有很高的复用性。