面试知识库
困难

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 一个线程