Reactor 模式
大部分网络框架的设计都基于 Reactor 模式。
这种模式基于事件驱动,特别适合处理大量的 IO 事件。
根据线程数量,我们可以将 Reactor 模式大致分为以下3种(以服务端实现为例):
单线程 Reactor
单个 Reactor 线程负责对TCP链路读写数据和编解码(包括执行业务逻辑)。
(很多人把该模式称为 “1 - 1”。其实这种称呼并不贴切。)
适用场景
适合 并发度低、请求处理快 的小应用。
缺陷
不适合 高并发、高负载的场景。因为:
-
单线程处理大量并发链路时性能不高,也无法发挥多核计算机的优势。无法满足大量消息的编解码和读写需求。
-
单线程负载过高后,处理速度变慢,可能导致大量客户端连接超时。超时会引起消息重发,线程负载更重。最终大量消息积压、超时,成为系统的性能瓶颈。
-
单线程可靠性不足。单个线程意外终止或陷入死循环,会导致整个系统通信瘫痪,无法接受和处理外部请求。
多线程 Reactor
与单线程Reactor模式不同,此模式用一个 NIO线程池 代替原来的单个Reactor线程。
通常,Reactor 线程池中,每个线程可以同时处理 N条链