「这是我参与2022首次更文挑战的第9天,活动详情查看:2022首次更文挑战」。
对于 PPC 与 TPC,它俩的优势是实现比较简单,但是无法支撑高并发。Reactor 和 Proactor 能支撑单机高并发。
Reactor 模式就是创建一个进程池,将不同的连接分配给不同的进程,一个进程可以处理多个连接。进程采用 read-业务处理 -write 的流程处理请求,为了防止一个连接的阻塞,需要将从连接中读取请求的方式改为非阻塞。
改为非阻塞之后如何处理不同连接的请求?轮询的话效率过低,通常采用 IO 多路复用,io 多路复用可以实现一个线程监听多个连接;如果没有请求,该线程会被阻塞住。 IO 多路复用有俩关键点:
- 多个连接公用一个阻塞对象,只需要在一个阻塞对象等待
- 某条连接有新的请求,操作系统会通知进/线程,进/线程会从阻塞状态返回,开始进行业务处理
Reactor 模式包含两个核心组成部分,Reactor 和资源池,reactor 负责监听和分配,资源池负责处理事件。reactor 模式灵活多变,主要体现在 reactor 和资源池的数量可以任意组合。常见的三种方案有:
- 单 reactor 进程/线程 reactor 对象通过 select 监控,收到事件后通过 dispatch 进行分发。 单 reactor 模式的优点就是比较简单,没有进程通信及竞争,缺点主要体现在:
- 只有一个进程,无法发挥多核的优势
- 容易有性能瓶颈
- 单 reactor 多线程 可以充分利用多核 cpu 的处理能力,但也存在一些问题:
- reactor 容易成为性能的瓶颈
- 多线程的数据共享和访问比较复杂
- 多 reactor 多线程/进程 很多系统采用这种方案,如 nginx 和 netty ,它有着优异的性能以及相对较低的复杂度