Netty 架构模型介绍
Netty 主要基于主从 Reactor 多线程模型进行改进。该模型包含多个 Reactor,分工明确:
- BossGroup 线程:维护 Selector,只关注
Accept事件。 - WorkerGroup 线程:负责网络的读写操作。
工作流程
- 当接收到
Accept事件时,获取对应的SocketChannel,封装成NioSocketChannel并注册到 Worker 线程(事件循环)中进行维护。 - 当 Worker 线程监听到 Selector 中通道发生感兴趣的事件后,交由 Handler 进行处理(Handler 已加入通道)。
核心组件与步骤
Netty 抽象出两组线程池:
- BossGroup:专门负责接收客户端的连接。
- WorkerGroup:专门负责网络的读写。
两者类型均为 NioEventLoopGroup。
NioEventLoopGroup相当于一个事件循环组,含有多个事件循环,每一个事件循环是NioEventLoop。NioEventLoop表示一个不断循环执行处理任务的线程,每个NioEventLoop都有一个Selector,用于监听绑定在其上的 Socket 的网络通讯。NioEventLoopGroup可以有多个线程,即可以含有多个NioEventLoop。
Boss NioEventLoop 循环执行步骤:
- 轮询
accept事件。 - 处理
accept事件,与 Client 建立连接,生成NioSocketChannel,并将其注册到某个 WorkerNioEventLoop上的Selector。 - 处理任务队列的任务,即
runAllTasks。
Worker NioEventLoop 循环执行步骤:
- 轮询
read,write事件。 - 处理 IO 事件,即
read,write事件,在对应NioSocketChannel处理。 - 处理任务队列的任务,即
runAllTasks。
业务处理:
每个 Worker NioEventLoop 处理业务时,会使用 Pipeline(管道)。Pipeline 中包含了 Channel,通过 Pipeline 可以获取到对应通道,管道中维护了很多的处理器。


