Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >面试官:谈谈你对Reactor模型的理解?

面试官:谈谈你对Reactor模型的理解?

作者头像
磊哥
发布于 2025-03-23 13:59:42
发布于 2025-03-23 13:59:42
870
举报
文章被收录于专栏:王磊的博客王磊的博客

Reactor 模型是一种事件驱动的高性能网络编程模型,主要用于处理高并发的网络 I/O 请求。其核心思想是通过一个或多个线程监听事件,并将事件分发给相应的处理程序,从而实现高效的并发处理。

为什么要有Reactor模型?

在高并发下,只有多路复用技术,以及 NIO 是不行的,因为 NIO 只是 Java 提供的非阻塞 I/O 库,它是通过轮询的方式检测事件变化的,所以效率不算太高,而 Reactor 模型可以通过监听事件(非轮询的方式,例如 Linux 下的 epoll 技术)来实现更高效的 IO 编程。

特征

Reactor 模型的主要特征如下:

  1. 事件驱动:所有 I/O 操作都由事件触发并处理。
  2. 非阻塞:操作不会因为 I/O 而挂起,避免了线程等待的开销。
  3. 高效资源利用:通过少量线程处理大量并发连接,提升性能。
  4. 组件分离:将事件监听(Reactor)、事件分发(Dispatcher)和事件处理(Handler)解耦,使代码结构更清晰。

组成

Reactor 模型的核心组件包括:

  1. Reactor:负责监听和分发事件,通常基于 I/O 多路复用技术,如 epoll。
  2. Acceptor:负责接收新的客户端连接,并将其注册到 Reactor 中。
  3. Handler:负责处理具体的 I/O 事件和业务逻辑。

实现模式

Reactor 模型实现模式总共有以下三种:

  1. 单线程 Reactor 模型:所有操作在一个线程完成,适用于低并发场景。
  2. 多线程 Reactor 模型:主线程处理连接,子线程池处理 I/O 和业务。
  3. 主从 Reactor 模型:主线程池处理连接,子线程池处理 I/O(进一步优化资源分配)。

它们的具体区别如下。

单线程 Reactor

执行流程
  1. Reactor 通过监听客户端请求事件(如连接、读、写)。
  2. 如果是连接事件,Acceptor 通过 accept 接受连接,并注册到 Reactor 中,之后创建一个 Handler 处理后续事件。
  3. 如果是读写事件,Reactor 调用对应的 Handler 处理,完成 read -> 业务处理 -> send 的完整流程。
优点

模型简单,没有多线程、进程通信和竞争问题,所有操作在一个线程中完成。

缺点
  • 性能瓶颈:只有一个线程,无法充分利用多核 CPU 的性能。当 Handler 处理业务时,无法处理其他连接事件。
  • 可靠性问题:如果线程意外终止或进入死循环,整个系统将不可用。
适用场景

客户端数量有限,业务处理非常快速。

多线程 Reactor

执行流程
  1. Reactor 通过监听客户端请求事件。
  2. 如果是连接事件,Acceptor 通过 accept 接受连接,并注册到 Reactor 中,之后创建一个 Handler 处理后续事件。
  3. 如果是读写事件,Reactor 调用对应的 Handler 处理。
  4. Handler 只负责读取数据,将业务处理交给 Worker 线程池。
  5. Worker 线程池 完成业务处理,将结果返回给 Handler,由 Handler 发送给客户端。
优点

充分利用多核 CPU 的性能,提高任务处理能力。

缺点
  • 多线程数据共享和访问复杂,涉及线程同步问题。
  • Reactor 仍然是单线程,高并发时可能成为性能瓶颈。
适用场景

• 并发需求较高,但任务处理逻辑简单的场景。

主从 Reactor 多线程

执行流程
  1. MainReactor(主线程)通过监听连接建立事件,由 Acceptor 处理连接请求。
  2. MainReactor 将新连接分配给 SubReactor(子线程)。
  3. SubReactor 将连接加入监听队列,并创建 Handler 处理后续事件。
  4. 当事件发生时,SubReactor 调用对应的 Handler 处理。
  5. Handler 读取数据后,将业务处理交给 Worker 线程池。
  6. Worker 线程池 完成业务处理,将结果返回给 Handler,由 Handler 发送给客户端。
优点
  • 职责明确:主线程只负责接收新连接,子线程负责业务处理。
  • 性能优化:主线程和子线程交互简单,适合高并发场景。
缺点

编程复杂度较高。

适用场景

高并发场景,例如 Nginx、Netty。

结论

模型

优点

缺点

适用场景

单线程 Reactor

模型简单,无多线程竞争问题

性能瓶颈,可靠性差

客户端少,业务处理快

多线程 Reactor

充分利用多核 CPU 性能

多线程数据共享复杂,Reactor 单线程可能成为瓶颈

并发需求高,任务处理简单

主从 Reactor

职责明确,性能优化,适合高并发

编程复杂度高

高并发场景(如 Nginx、Netty)

使用场景

Reactor 模型应用在 Nginx、Netty、Kafka 以及 Redis 等框架中。

小结

Reactor 模型是一种实现思路(也是一种设计模式),它是通过事件驱动和非阻塞 I/O 机制,实现了高并发、高性能的网络编程。其核心思想是通过一个或多个线程监听事件,并将事件分发给相应的处理程序,从而实现高效的并发 IO 处理。

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:场景题、并发编程、MySQL、Redis、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、JVM、设计模式、消息队列等模块。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
五分钟快速理解 Reactor 模型
本文将介绍基于进程/线程模型,服务器如何处理请求。值得说明的是,具体选择线程还是进程,更多是与平台及编程语言相关。
架构师修炼
2021/04/09
5.9K0
五分钟快速理解 Reactor 模型
Netty高性能架构之Reactor模式
  在讨论Netty的架构模式之前,我们先来介绍下Reactor模式,因为Netty的架构模式是在此基础上演变而来的
用户4919348
2019/12/31
1.3K0
Netty学习之线程模型基本介绍
现如今,我们使用通用的应用程序或库来相互通信。例如,我们经常使用HTTP客户端库从服务器上获取信息并通过web服务执行远程过程调用。但是,通用协议或它的实现有时并不能很好的伸缩。这就像我们不会使用通用HTTP服务器来交换大文件、电子邮件、还有像金融信息、游戏数据等实时信息。这些业务所需要的是高度优化实现协议,用于专门的目的。例如,您可能希望实现一个针对基于ajax的聊天应用程序、媒体流应用、大文件传输进行优化的http服务器。您甚至可能想要设计并实现一个完全符合您的需求的新协议。另一个不可避免的情况是,你不得不去处理一个遗留的专有协议,来保证和旧系统的互操作性。在这些情况下,重要的是在不牺牲最终应用程序的稳定性和性能的前提前,如何尽可能快的实现该协议。
小诸葛
2020/06/28
7990
Linux高性能IO网络模型对比分析:Reactor vs Proactor
随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力。本文旨在为大家提供有用的高性能网络编程的I/O模型概览以及网络服务进程模型的比较,以揭开设计和实现高性能网络架构的神秘面纱。 2、关于作者 陈彩华(caison):主要从事服务端开发、需求分析、系统设计、优化重构工作,主要开发语言是 Java。 3、线程模型 上篇《高性能网络编程(五):一文读懂高性能网络编程中的I/O模型》介绍完服务器如何基于 I/O 模型管理连接,获取输入数据,下面将介绍基于进程/线程模型,服务器如何处理请求。 值得说明的是,具体选择线程还是进程,更多是与平台及编程语言相关。 例如 C 语言使用线程和进程都可以(例如 Nginx 使用进程,Memcached 使用线程),Java 语言一般使用线程(例如 Netty),为了描述方便,下面都使用线程来进行描述。 4、线程模型1:传统阻塞 I/O 服务模型
sunsky
2021/01/06
3.9K0
07-Netty 高性能架构设计-线程模型(Reactor模式)
1. Select是前面IO复用模型介绍的标准网络编程API,可以实现应用程序通过一个阻塞对象监听多路连接请求
彼岸舞
2022/02/18
4800
07-Netty 高性能架构设计-线程模型(Reactor模式)
【Netty】主从反应器 ( Reactor ) 多线程模型
单反应器 ( Reactor ) 单线程模型 弊端 : 反应器 ( Reactor ) 运行在一个线程中 , 同时处理客户端连接 , 与客户端数据收发 , 在高并发的情况下会产生阻塞 ;
韩曙亮
2023/03/27
7780
【Netty】主从反应器 ( Reactor ) 多线程模型
彻底搞懂Reactor模型和Proactor模型
在高性能的I/O设计中,有两个著名的模型:Reactor模型和Proactor模型,其中Reactor模型用于同步I/O,而Proactor模型运用于异步I/O操作。
全菜工程师小辉
2019/08/16
42.1K4
线程模型Reactor/Proactor的区别
反应器(Reactor)是一种为处理服务请求并发提交到一个或者多个服务处理程序的事件设计模式,当接收请求后,服务处理程序使用解多路分配策略,然后同步地派发这些请求至相关的请求处理程序。 处理特点: 1.事件驱动(event handling)
Monica2333
2020/06/19
4360
NIO Reactor模型
Reactor模式是基于事件驱动开发的,服务端程序处理传入多路请求,并将它们同步分派给请求对应的处理线程,Reactor模式也叫Dispatcher模式,即I/O多路复用统一监听事件,收到事件后分发(Dispatch给某进程),这是编写高性能网络服务器的必备技术之一。
全栈程序员站长
2022/11/15
4680
NIO Reactor模型
3. Netty 入门
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。
玖柒的小窝
2021/12/07
3170
3. Netty 入门
原来 8 张图,就能学废 Reactor 和 Proactor
别小看这两个东西,特别是 Reactor 模式,市面上常见的开源软件很多都采用了这个方案,比如 Redis、Nginx、Netty 等等,所以学好这个模式设计的思想,不仅有助于我们理解很多开源软件,而且也能在面试时吹逼。
小林coding
2021/05/27
9860
原来 8 张图,就能学废 Reactor 和 Proactor
Netty 线程模型(Reactor 线程模型)
Netty 线程模型(Reactor 线程模型)
Java架构师必看
2021/05/14
5320
Netty 线程模型(Reactor 线程模型)
进击的NIO!Reactor模式!
本文主要参考Doug Lea(大神)的《Scalable IO in Java》中讲述的Reactor模式。
java技术爱好者
2020/09/22
2.3K0
进击的NIO!Reactor模式!
Reactor模式详解
在学习Reactor模式之前,我们需要对“I/O的四种模型”以及“什么是I/O多路复用”进行简单的介绍,因为Reactor是一个使用了同步非阻塞的I/O多路复用机制的模式。
全栈程序员站长
2022/09/20
1.5K0
Reactor模式详解
【Netty】反应器 Reactor 模式 ( 单反应器 Reactor 单线程 | 单反应器 Reactor 多线程 )
① 基于事件驱动 : 多个客户端同时向服务器端传递数据 , 每个客户端传递数据的行为都称为一个事件 , 每个事件都会触发相应操作 ;
韩曙亮
2023/03/27
9300
【Netty】反应器 Reactor 模式 ( 单反应器 Reactor 单线程 | 单反应器 Reactor 多线程 )
Netty网络编程第六卷
1)获取请求数据,客户端与服务器建立连接发出请求,服务器接受请求(1-3); 2)构建响应,当服务器接收完请求,并在用户空间处理客户端的请求,直到构建响应完成(4); 3)返回数据,服务器将已构建好的响应再通过内核空间的网络 I/O 发还给客户端(5-7)。
大忽悠爱学习
2022/05/06
3790
Netty网络编程第六卷
Reactor线程模型
根据大神Doug Lea 在 《Scalable IO in Java 》中的介绍,Reacotr模型主要分为三个角色
每天晒白牙
2020/08/20
6200
Netty运用Reactor模式到极致
ractor 单线程模式是指所有的I/O操作都在一个NIO线程完成,该线程的职责:
BUG弄潮儿
2020/11/03
5590
Netty运用Reactor模式到极致
Netty框架整体架构及源码知识点
Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持。作为当前最流行的NIO框架,Netty在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,一些业界著名的开源组件也基于Netty的NIO框架构建。
用户4447430
2019/05/04
9040
滴滴面试:谈谈你对Netty线程模型的理解?
Netty 线程模型是指 Netty 框架为了提供高性能、高并发的网络通信,而设计的管理和利用线程的策略和机制。
磊哥
2024/05/31
2780
相关推荐
五分钟快速理解 Reactor 模型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档