3、Reactor线程模型
一、服务器:BIO线程模型
二、服务器:基于NIO下的Reactor线程模型
上图示意就是个简单的NIO单Reactor单线程处理模型,流程如下:
-
Reactor对象通过select监听客户端的请求事件,收到事件消息后通过dispatch进行事件分发。
-
如果是建连请求,则交由Acceptor对象处理连接请求,然后创建一个Handler对象继续完成后续处理。
-
若不是建连请求,则dispatch会调用对应的Handler进行处理,Handler负责完成连接成功后的后续处理(读操作、写操作、业务处理等)。
此模型很简单,易于理解,但是存在一定的问题,比如单线处理程模型下,无法发挥多核CPU的性能,如果Handler上的业务处理很慢,则意味着整个程序无法处理其他连接事件,造成性能问题。
该模式适用于业务处理快速、客户端连接较少的情况。
2.1、优化方案1:引入线程池处理Handler业务逻辑
2.2、优化方案2:引入线程池并且分离Handler
主Reactor对象通过select监听客户端的连接事件,收到连接事件后交由Acceptor处理。
Acceptor处理完成后,主Reactor将此连接分配给子Reactor处理,子Reactor将此连接加入连接队列进行事件监听并建立Handler进行后续的各种操作,同上面的模型一致,子Reactor会监听新的事件,如果有新的事件发生,则调用Handler进行相应的处理。
该模型存在两个线程分别处理Reactor事件,主线程只负责处理连接事件,子线程只负责处理读写事件,这样主线程可以处理更多的连接,而不用关心子线程里的读写处理是否会影响到自己。
版权声明
非特殊说明,本文由Zender原创或收集发布,欢迎转载。
ZENDER
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。