核心概念
Netty 基于 Reactor 模式 提供了三种线程模型:
- 单 Reactor 单线程模型
- 单 Reactor 多线程模型
- 主从 Reactor 多线程模型(推荐)
1. 单 Reactor 单线程模型
EventLoopGroup group = new NioEventLoopGroup(1);
ServerBootstrap b = new ServerBootstrap();
b.group(group).channel(NioServerSocketChannel.class);
特点:所有操作(Accept、Read、Write)在一个线程完成
适用场景:低并发、简单业务
2. 单 Reactor 多线程模型
EventLoopGroup group = new NioEventLoopGroup();
ServerBootstrap b = new ServerBootstrap();
b.group(group).channel(NioServerSocketChannel.class);
特点:一个 Reactor 处理 Accept,多个 Worker 处理读写
适用场景:中等并发
3. 主从 Reactor 多线程模型(推荐)
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class);
特点:
- BossGroup:负责 Accept 新连接
- WorkerGroup:负责读写事件
优势:职责分离,充分利用多核 CPU
面试总结
推荐使用主从 Reactor 模型,BossGroup 负责连接,WorkerGroup 负责读写,性能最优。