美文网首页Java相关
网络相关 - NIO之Reator模式

网络相关 - NIO之Reator模式

作者: 万福来 | 来源:发表于2020-04-06 21:49 被阅读0次

Reactor单线程模型

由于Reactor模式使用的是异步非阻塞IO,所有的IO操作都不会被阻塞,理论上一个线程可以独立处理所有的IO操作。这时Reactor线程是个多面手,负责多路分离套接字,Accept新连接,并分发请求到处理链中。


image.png

对于一些小容量应用场景,可以使用到单线程模型。但对于高负载,大并发的应用却不合适,主要原因如下:
当一个NIO线程同时处理成百上千的链路,性能上无法支撑,即使NIO线程的CPU负荷达到100%,也无法完全处理消息
当NIO线程负载过重后,处理速度会变慢,会导致大量客户端连接超时,超时之后往往会重发,更加重了NIO线程的负载。
可靠性低,一个线程意外死循环,会导致整个通信系统不可用
为了解决这些问题,出现了Reactor多线程模型。

Reactor多线程模型

image.png

相比上一种模式,该模型在处理链部分采用了多线程(线程池)。
在绝大多数场景下,该模型都能满足性能需求。但是,在一些特殊的应用场景下,如服务器会对客户端的握手消息进行安全认证。这类场景下,单独的一个Acceptor线程可能会存在性能不足的问题。为了解决这些问题,产生了第三种Reactor线程模型

Reactor主从模型

image.png

该模型相比第二种模型,是将Reactor分成两部分,mainReactor负责监听server socket,accept新连接;并将建立的socket分派给subReactor。subReactor负责多路分离已连接的socket,读写网络数据,对业务处理功能,其扔给worker线程池完成。通常,subReactor个数上可与CPU个数等同。

相关文章

网友评论

    本文标题:网络相关 - NIO之Reator模式

    本文链接:https://www.haomeiwen.com/subject/xxpiphtx.html