线程图如下
-
Netty抽象出两组线程池BossGroup专门负责接收客户端的连接,WorkerGroup专门负责网络的读写
-
BossGroup和 WorkerGroup类型都是NioEventLoopGroup
-
NioEventLoopGroup相当于一个事件循环组,这个组中含有多个事件循环,每一个事件循环是NioEventLoop
-
NioEventLoop表示一个不断循环的执行处理任务的线程,每个NioEventLoop都有一个selector ,用于监听绑定在其上的socket的网络通讯
-
NioEventLoopGroup可以有多个线程,即可以含有多个NioEventLoop
-
每个Boss NioEventLoop循环执行的步骤有3步
1.轮询accept事件
2处理accept事件,与client建立连接,生成NioScocketChannel ,并将其
注册到某个worker NlOEventLoop上的selector
3.处理任务队列的任务,即runAllTasks -
每个 Worker NIOEventLoop循环执行的步骤
1.轮询read, write事件
2.处理i/o事件,即read , write事件,在对应NioScocketChanhel处理
3.处理任务队列的任务,即runAllTasks -
每个worker NIOEventLoop 处理业务时,会使用pipeline(管道), pipeline中包含了channel,即通过pipeline可以获取到对应通道.管道中维护了很多处理器