Reactor模型
不止是netty,很多高性能网络框架,例如nginx、redis,都使用了reactor模型。
Reactor模型是在NIO多路复用基础上,类似于事件驱动模式。由Reactor线程、Handlers处理器、Acceptor线程组成。Acceptor线程用于处理客户端连接请求,Reactor线程负责响应io事件,通过dispatch分发到Handlers处理器,Handler处理器非阻塞的执行业务处理逻辑。
核心思想是把响应io事件和业务处理分离。所以Reactor的几种模型,区别就在于使用多线程处理io事件或使用多线程监听客户端连接。
单线程Reactor
Acceptor类接受客户端的TCP链接请求,链路建立成功后,通过reactor将对应的数据分发到指定的Handler上去处理
所有的io操作都使用一个NIO线程执行,但是当某个Handler阻塞时,会导致其他Handler得不到执行,导致服务器无响应,且无法利用多核优势。
多线程Reactor
和单线程Reactor模型相比,将负责数据传输处理的Handler处理器放入独立的线程池处理io操作。
主从线程Reactor
一个NIO线程负责监听和处理所有客户端连接可能会出现性能问题。
和多线程Reactor模型相比,使用独立的NIO线程池接受客户端连接,Reactor分为mainReactor和subReactor,mainReactor负责监听新链接,新链接后续操作交给subReactor处理。
netty-Reactor
netty采用了主从Reactor模型实现,其中主Reactor在Netty中对应Boss group 线程组,子Reactor对应Worker Group 线程组。主Reactor仅负责建立连接,一般设置1个线程就足够。在主Reactor建立好连接后,将其注册到Worker Group线程组,触发相应的IO事件,最终由Pipeline中的多个Handler进行有序处理
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 27 天,点击查看活动详情