目录
1.线程模型分析:
永远要记住, Reactor(监听和分发)是通过多路复用器Selector(select,poll,epoll)进行工作的,并且处理的事件中,就是客户端连接(Selection.OP_ACCEPT)和读(Selection.OP_READ)这两种事件。Acceptor(应该就是ServerSocketChannel,或者说肯定主要用到了它,同样也要注册到Selector,专门处理客户端连接事件)负责处理客户端连接事件,Handler其实就是把处理READ事件的操作封装一下。
主从Reactor中的主Reactor(主线程)只处理客户端连接事件,从Reactor(子线程们)只处理read事件。主Reactor处理完连接事件后,生成一个NIOSocketChannel(封装了SocketChannel),然后将其注册到从Reactor的selector中。
三种:
- 单Reactor单线程
- 单Reactor多线程
- 主从Reactor多线程(Netty)
2.单Reactor多线程工作原理:
跟单Reactor单线程相比,多加了一个线程池去处理具体的业务,而不是再由主线程自己负责全部事情,一定程度上提高了并发性能,但由于Reactor和Dispatch还是在同一个单线程中进行监听和分发,性能还是有限。
Note: 其中的Acceptor应该就是ServerSockerChannel
3.优缺点分析:
这里就不提供代码了,因为很好理解。
4.Reactor模式小结:
Netty又进一步进行了功能的增强,可以有多个MainReactor(叫做Boss Group),当然还是多个subReactor,下图是一个最简单的Netty线程模型的工作原理示意图: