CodeWalk

Netty的Reactor线程模型有哪几种?

作者:专业代码师 · 2026-05-30 12:55

深入分析Netty的Reactor线程模型,包括Reactor单线程模型、Reactor多线程模型和主从Reactor多线程模型的架构设计与实现原理,以及Netty中EventLoopGroup、EventLoop的对应关系。

回答

专业代码师

Netty基于主从Reactor多线程模型实现:

1. Reactor单线程模型

  • 所有I/O操作由一个线程完成(Acceptor + Handler),适用于小容量场景
  • NIO原生方式,线程角色:Reactor + Acceptor + Handler
  • 缺点:单线程处理所有事件,高负载下成为瓶颈

2. Reactor多线程模型

  • 一个Acceptor线程负责接收连接(Boss Group),多个Handler线程(Worker Group)处理读写
  • Boss Group中的EventLoop负责accept,注册Channel到Worker Group
  • Worker Group中的EventLoop负责read/write

3. 主从Reactor多线程模型(Netty默认)

  • Boss Group:多个Acceptor线程(通常1个),负责接收客户端连接,将Channel注册到Worker Group
  • Worker Group:多个EventLoop线程,负责SocketChannel的读写
  • 每个EventLoop绑定一个Selector和一个线程,一个EventLoop处理多个Channel
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
 .channel(NioServerSocketChannel.class)
 .childHandler(new ChannelInitializer<SocketChannel>() {...});

核心设计:EventLoop = Thread + Selector + TaskQueue,每个Channel的I/O事件始终在同一个EventLoop中处理,避免了线程安全问题。