两组线程池
- BossGroup专门负责接收客户端的连接
- WorkerGroup专门负责网络的读写
BossGroup和WorkerGroup类型都是NioEventLoopGroup,NioEventLoopGroup相当于一个事件循环组,这个组中含有多个事件循环,每一个事件循环是NioEventLoop
NioEventLoop表示一个不断循环的执行处理任务的线程,每个NioEventLoop都有一个selector,用于监听绑定在其上的socket的网络通讯
NioEventLoopGroup可以有多个线程,即可以含有多个NioEventLoop。
每个BossGroup循环执行的步骤如下
- 轮询accept事件
- 处理accept事件,与client建立连接,生成NioSocketChannel,并将其注册到某个WorkerGroup上的selector上
- 处理任务队列的任务,即runAllTasks
每个WorkerGroup循环执的步骤如下
- 轮询read/write事件
- 处理I/O事件,即read、write事件
- 处理任务队列中的任务,即runAllTasks
Netty的组件及其之间的关系
- NioEventLoopGroup下包含多个NioEventLoop
- 每个NioEventLoop中包含有一个selector,一个taskQueue/scheduledTaskQueue
- 每个NioEventLoop的selector上可以注册多个NioChannel
- 每个NioChannel只会绑定在唯一的NioEventLoop上
- 每个NioChannel都绑定有一个自己的ChannelPipeline