Netty 接收请求接收请求过程:线程组协作与事件循环机制
Netty 作为高性能高性能的网络框架,其核心优势之一在于通过双线程组分工和事件循环机制实现高效的请求处理。本文将深入解析 bossGroup 与 workerGroup 如何协同工作,以及 EventLoop 的循环逻辑如何支撑这一过程,揭示 Netty 处理请求的底层原理。
线程组的分工:bossGroup 与 workerGroup
Netty 服务端通过两个线程组实现请求处理的分离,各司其职又紧密协作:
bossGroup:连接监听者
- 核心职责:仅负责接收客户端的 TCP 连接请求,不处理具体业务。
- 线程数配置:通常设置为 1 个线程(
new NioEventLoopGroup(1)),因为连接建立是轻量操作,单线程足以应对高并发连接。 - 底层实现:绑定到
NioServerSocketChannel,通过 Selector 监听OP_ACCEPT事件(连接请求事件)。
workerGroup:IO 处理者
- 核心职责:处理已建立的连接的 IO 事件(如读取请求、发送响应),执行编解码和业务逻辑。
- 线程数配置:默认为
CPU 核心数 × 2,可根据业务压力调整(IO 密集型场景可适当增加)。 - 底层实现:每个客户端连接(
NioSocketChannel)会被分配给 workerGroup 中的一个 EventLoop,由其专属线程处理所有 IO 事件。
请求接收与处理的完整流程
客户端请求从连接建立到数据处理的全过程,涉及 bossGroup 与 workerGroup 的协同,可分为以下步骤: