上文《Netty系列(二)Reactor模式详解》中介绍了
Reactor模型,Netty就是基于此模型的多线程模式,做了进一步封装。
以下是Netty工作架构图:
方案说明:
- Netty 抽象出两组线程池BossGroup和WorkerGroup,BossGroup专门负责接收客户端的连接, WorkerGroup专门负责网络的读写;
- BossGroup和WorkerGroup类型都是NioEventLoopGroup;
- NioEventLoopGroup 相当于一个事件循环线程组, 这个组中含有多个事件循环线程 , 每一个事件 循环线程是NioEventLoop;
- 每个NioEventLoop都有一个selector , 用于监听注册在其上的socketChannel的网络通讯;
- NioEventLoopGroup可以有多个线程,即可以有多个NioEventLoop;
- 每个Boss NioEventLoop线程内部循环执行的步骤有 3 步:
- 轮询accept事件;
- 处理accept事件 , 与client 建立连接 , 生成 NioSocketChannel;将NioSocketChannel注册到某个worker NIOEventLoop上的selector ;
- 处理任务队列的任务 , 即runAllTasks;
- 每个worker NIOEventLoop线程循环执行的步骤:
- 轮询注册到自己selector上的所有NioSocketChannel 的read, write事件;
- 处理 I/O 事件, 即read , write 事件, 在对应NioSocketChannel 处理业务;
- runAllTasks处理任务队列TaskQueue的任务 ,一些耗时的业务处理一般可以放入TaskQueue中慢慢处理,这样不影响数据在 pipeline 中的流动处理;
- 每个worker NIOEventLoop处理NioSocketChannel业务时,会使用 pipeline (管道),管道中维护 了很多 handler 处理器用来处理 channel 中的数据。