Netty线程模型初识

B站
Netty线程模型是基于主从Reactor多线程模式做了一定的改进得来的

在这里插入图片描述

●Netty抽象出两组线程池,BossGroup专门负责接收客户端的连接,WorkerGroup专门负责网络的读写

●BossGroup和WorkerGroup类型的本质都是NioEventLoopGroup类型。

●NioEventLoopGroup相当于一个线程管理器(类似于ExecutorServevice),它下面维护很多个NioEventLoop线程。

●在初始化这两个Group线程组时,默认会在每个Group中生成CPU*2个NioEventLoop线程
当n个连接来了,Group默认会按照连接请求的顺序分别将这些连接分给各个NioEventLoop去处理。
同时Group还负责管理EventLoop的生命周期。

●NioEventLoop表示一个不断循环的执行处理任务的线程
它维护了一个线程和任务队列。
每个NioEventLoop都包含一个Selector,用于监听绑定在它上面的socket通讯。
每个NioEventLoop相当于Selector,负责处理多个Channel上的事件
每增加一个请求连接,NioEventLoopGroup就将这个请求依次分发给它下面的NioEventLoop处理。

●每个Boss NioEventLoop循环执行的步骤有3步:
轮询accept事件
处理accept事件,与client建立连接,生成NioSocketChannel,并将其注册到某个Worker NioEventLoop的selector上。
处理任务队列到任务,即runAllTasks

●每个Worker NioEventLoop循环执行的步骤:
轮询read,write事件
处理I/O事件,即read,write事件,在对应的NioSocketChannel中进行处理
处理任务队列的任务,即runAllTasks

●每个 Worker NioEventLoop处理业务时,会使用pipeline(管道),pipeline中维护了一个ChannelHandlerContext链表,而ChannelHandlerContext则保存了Channel相关的所有上下文信息,同时关联一个ChannelHandler对象。如图所示,Channel和pipeline一一对应,ChannelHandler和ChannelHandlerContext一一对应。


在这里插入图片描述

你可能感兴趣的:(Netty线程模型初识)