Reactor模式
Reactor 是反应堆的意思,Reactor 模型是指通过一个或多个输入同时传递给处理器。服务端将它们同步分派给请求对应的处理线程,Reactor 模式也叫 Dispatcher 模式。Netty 整体是整体采用了主从Reactor模型
Reactor角色
Reactor模型中有三种角色,分别是
- Acceptor:处理客户端新连接,并分派请求到处理器链中
- Reactor:负责监听和分配事件,将I/O事件分派给对应的Handler。
- Handler:事件处理,如编码、解码等
Reactor 线程模型:
Reactor有三种线程模型分别是:单Reactor单线程模型、单Reactor多线程模型、主从Reactor多线程模型。而Netty正是采用最后一种。
1. 单Reactor单线程模型
该模型下所有请求建立、IO读写、业务处理都在一个线程中完成。如果在业务中处理中出现了耗时操作,就会导致所有请求全部处理延时。因为他们是有由一个线程同步处理的。上节所讲的心跳服务即是一个列例子。
单Reactor多线程模型
为了防止业务处理导致阻塞,在多线程模型下会用一个线程池来异步处理业务,当处理完成后在回写给客户端。上节所讲的Http服务即是一个列例子
主从Reactor多线程模型
单React始终无法发挥现代服务器多核CPU的并行处理能力,所以Reactor是可以有个的,并且有一主多从之分。一个主Reactor仅处理连接,而多个子Reactor用于处理IO读写。然后交给线程池处理业务。Tomcat就是采用该模式实现。