Netty模型
工作原理示意图 1-简单版
Netty主要是基于主从Reactors多线程模型(如图)做了一定的改进, 其中主从Reactor 多线程模型有多个Reactor
对上图的说明
- BossGroup线程维护Selector,只关注Accecpt
- 当接收到Accept事件,获取到对应的SocketChannel,封装成NIOScoketChannel并注册到Worker线程(事件循环),并进行维护
- 当Worker线程监听到selector中通道发生自己感兴趣的事件后,就进行处理(就由handler),注意handler经加入到通道
工作原理示意图 2-进阶版
工作原理示意图3-详细版
对上图的说明小结
- Netty抽象出两组线程池Boss Group 专门负责接收客户端的连接, WorkerGroup 专门负责网路的读写
- Boss Group 和 WorkerGroup 类型都是NIOEventLoopGroup
- NioEventLoopGroup相当于一个事件循环组, 这个组中含有多个事件循环, 每一个事件循环是NioEventLoop
- NioEventLoop表示一个不断循环的执行处理任务的线程, 每个NioEventLoop都有一个Selector, 用于监听绑定在其上的Socket的网络通讯
- NioEventLoopGroup 可以有多个线程, 即可以含有多个NIOEventLoop
- 每个Boss NioEventLoop 循环执行的步骤有3步
- 轮训accept事件
- 处理accept事件, 与client建立连接, 生成NioSocketChannel, 并将其注册到某个worker NioEventLoop上的selector
- 处理任务队列任务,即runAllTask
- 每个Worker NIOEventLoop循环执行的步骤
- 轮训read, write事件
- 处理IO事件, 即read, write事件, 在NIOSocketChannel处理
- 处理任务队列的任务, 即runAllTask
- 每个Worker NioEventLoop 处理业务时, 会使用pipeline(管道), pipeline中包含了channel, 即通过pipeline可以获取到对应的通道,通道中维护了很多的处理器