Netty线程模型

原理图

二话不说,直接上图
(Channel少了一个a)
Netty线程模型_第1张图片
BossGroup维护Selector,只关心Accept事件

当接受到Accept事件时,获取到对应的SocketChannel,封装成NioSocketChannel并注册到worker线程,并进行维护

当Worker发现有可以处理的事件,就开始处理。

复杂图

刚刚这张图过于简单,netty比较复杂,画一张比较复杂的图。
Netty线程模型_第2张图片

完整流程图

Netty线程模型_第3张图片

Netty抽象出两组线程池,BossGroup专门负责连接,WorkerGroup专门负责网络的读写。

BossGroup和WorkerGroup类型都是NioEventGroup

NioEventLoop相当于一个事件循环组,这个组中每个循环的事件时NioEventLoop

NioEventLoop表示一个不断循环的执行任务的线程,每个NioEventLoop都有一个Selector,用于监听绑定在其上的Socket上的网络通信

NioEventGroup可以包含多个NioEventLoop

BossGroup执行步骤:
1.轮询accept事件
2.处理accept事件,与client建立连接,生成NioSocketChannel,并将其注册到其中一个WorkerGroup上的NioEventLoop的selector
3.处理任务队列里的任务

WorkerGroup执行步骤:
1.轮询read/write事件
2.在NioSocketChannel中处理Io事件
3.处理任务队列中的任务

每一个Worker NioEventLoop处理业务时,会调用管道,管道和channel是双向可以获取的。

你可能感兴趣的:(netty与Nio,java,jvm,面试)