Netty入门
2026/10/9约 484 字
Reactor 模式
Reactor 模式是网络编程里最经典的事件驱动设计模式,Netty、Redis、Nginx、Tomcat 里都能看到它。它的核心思想可以用三步概括:
注册感兴趣的事件 → 扫描是否有感兴趣的事件发生 → 事件发生后做出相应的处理。
对照 NioSelectorServer 的代码,这三步的对应关系非常直接:
| Reactor 三步 | NIO 里的实现 |
|---|---|
| 注册感兴趣的事件 | channel.register(selector, SelectionKey.OP_READ) |
| 扫描是否有事件发生 | selector.select(),阻塞等待,由内核通知就绪事件 |
| 事件发生后处理 | 遍历 selectedKeys(),按事件类型分发到对应的处理逻辑 |
其中 Selector 负责「扫描」,register 负责「注册」,「分发」由应用代码完成。把这套流程抽象出来就是 Reactor 模式;把角色再拆一拆,又演化出不同的线程模型:
- 单 Reactor 单线程:一个线程包办 accept、读写、业务处理。实现最简单,Redis 就是这种模型(Redis 6 之后网络 IO 引入了多线程,但核心命令处理仍是单线程);缺点是耗时的业务处理会卡住整个事件循环。
- 单 Reactor 多线程:Reactor 线程只负责接收连接和读写事件分发,真正的业务处理丢给线程池,避免耗时逻辑卡住事件循环。
- 主从 Reactor 多线程:主 Reactor 只负责 accept,把连接交给从 Reactor;从 Reactor 负责读写事件分发,业务处理再交给工作线程池。Netty 采用的就是这种模型:bossGroup 对应主 Reactor,workerGroup 对应从 Reactor。
一句话总结 Reactor 的价值:它把「等待事件」和「处理事件」解耦,等待交给少量线程(甚至一个),处理可以按需扩展,从而用有限的线程支撑海量连接——这正是 Netty 高性能的根基。