Java NIO线程模型分析--主从Reactor多线程

目录

1.线程模型分析:

2.主从Reactor多线程工作原理:

3.优缺点:

4.Reactor模式小结:


1.线程模型分析:

永远要记住, Reactor(监听和分发)是通过多路复用器Selectorselect,poll,epoll)进行工作的,并且处理的事件中,就是客户端连接(Selection.OP_ACCEPT)和读、写(Selection.OP_READ)这3种事件Acceptor(应该就是ServerSocketChannel,或者说肯定主要用到了它)应该是具体负责处理客户端连接事件,Handler其实就是把处理READ事件的操作封装一下。

主从Reactor中的主Reactor(主线程)处理客户端连接事件,从Reactor(子线程们)处理READ事件和WRITE事件(SocketChannel向selector注册READ和WRITE事件,只不过WRITE是必须在handler处理完毕,需要返回Response的时候,才会进行注册。主线程处理完连接事件后,生成一个NIOSocketChannel(封装了SocketChannel),然后将其注册到从Reactor的selector中

MainReactor只处理客户端连接事件,SubReactor处理Read事件,Acceptor应该就是ServerSocketChannel(或者说肯定主要用到了它).

从Reactor(子线程们)处理READ事件?其实不是的,因为handler处理完之后需要返回一个response,怎样处理这个response?需要对应的SocketChannel向selector注册WRITE事件,然后通过selector.select()去poll出读、写事件,最终通过对应的SocketChannel将信息返回。以Kafka的NIO实现为例:

2.主从Reactor多线程工作原理:

3.优缺点:

4.Reactor模式小结:

Netty又进一步进行了功能的增强,可以有多个MainReactor(叫做Boss Group),当然还是多个subReactor,下图是一个最简单的Netty线程模型的工作原理示意图:


版权声明:本文为wdquan19851029原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。