中 困难
Reactor模式#
一句话答案#
Reactor 用少量线程监听多连接 IO 事件再分发处理,Netty 用主从 Reactor:BossGroup 接连接 + WorkerGroup 处理 IO。
核心要点
三种模型:
| 模型 | 结构 | 适用 |
|---|---|---|
| 单 Reactor 单线程 | 1个线程处理一切 | 小规模 |
| 单 Reactor 多线程 | Reactor监听+线程池处理 | 中等规模 |
| 主从 Reactor | 主Reactor接连接+从Reactor处理IO | 高并发(Netty) |
Netty: BossGroup(accept) + WorkerGroup(IO) + Pipeline(Handler链)
面试回答(2分钟版)
Reactor模式是一种基于事件驱动和IO多路复用的网络编程模型,核心思想是用少量线程监听大量连接的IO事件,事件就绪后分发给对应的处理器处理。它有三种演进形式:单Reactor单线程就是一个线程干所有事,适合小规模场景;单Reactor多线程是Reactor线程负责监听事件,业务处理交给线程池,适合中等规模;主从Reactor是目前高并发场景的主流方案,主Reactor(BossGroup)只负责接收新连接,从Reactor(WorkerGroup)负责处理已建立连接的IO读写,业务逻辑再交给Handler链处理。Netty就是典型的主从Reactor实现,BossGroup接受连接后注册到WorkerGroup的某个NioEventLoop上,每个EventLoop绑定一个线程负责该连接后续所有IO操作,通过Pipeline中的Handler链来处理编解码和业务逻辑。和Proactor的区别在于Reactor是同步非阻塞,应用程序自己读数据;Proactor是异步的,OS完成IO后通知应用。
追问与易错
追问方向:
- “单 Reactor 和主从 Reactor 区别?”→ 单 Reactor 一个线程监听所有事件(accept+IO 竞争),主从 Reactor 主线程只负责 accept,从线程处理 IO 读写,互不干扰
- “Netty 的线程模型?”→ 典型主从 Reactor:BossGroup(1个 EventLoop 负责 accept)+ WorkerGroup(多个 EventLoop 各绑定一个线程处理 IO)+ Pipeline Handler 链
- “Reactor 和 Proactor 区别?”→ Reactor 是同步非阻塞(应用程序自己读数据),Proactor 是异步(OS 完成 IO 后通知应用直接拿结果),Linux AIO 不成熟所以主流用 Reactor
易错点:
- ❌ Reactor 是多线程模型——核心是事件驱动+IO 多路复用
- ❌ Netty 的 NioEventLoop 是一个线程——每个 EventLoop 一个线程