Netty主要基于主从Reactor多线程模型。BossGroup线程维护Selector只关注Accept事件。当接收到Accept事件,获取到对应的SocketChannel,封装成NioSocketChannel并注册到Worker线程(事件循环),并进行维护。当Worker线程监听到Selector中通道发生自己感兴趣的事件后,就进行处理(Handler),注意Handler必须是添加到通道中的。
Netty工作原理:
Netty抽象出两组线程池BossGroup专门负责接收客户端的连接,WorkderGroup专门负责网络的读写。BossGroup和WorkerGroup类型都是NioEventLoopGroupNioeventLoopGroup相当于一个事件循环组。这个组中含有多个事件循环,每一个事件循环是NioEventLoopNioEventLoop表示一个不断循环的执行处理任务的线程,,每个NioEventLoop都有一个Selector,用于监听绑定在其上的Socket的网络通讯。NioEventLoopGroup可以有多个线程,即可以含有多个NioEventLoop- 每个
Boss NioEventLoop循环执行的步骤:
- 轮询处理
Accept事件 - 处理
Accept事件,与Client建立连接,生成NioSocketChannel,并将其注册到某个Worker NioEventLoop上的Selector - 处理任务队列的任务,即
runAllTask
- 每个
Worker NioEventLoop循环执行的步骤:
- 轮询
Reead、Write事件 - 处理
I/O事件,即Reead、Write事件,在对应NioSocketChannel处理 - 处理任务队列的任务,即
RunAllTask
- 每个
Worker NioEventLoop处理业务时,会使用Pipelien(管道),Pipeline中包含了Channel,即通过Pipeline可以获取到对应的通道,Channel管道中维护了很多的处理器
