当前位置: 首页 > news >正文

【C++】Reactor和Proactor

目录

  • 一、Reactor 模型
    • 核心思想
    • 关键组件:
    • 工作流程:
    • 典型实现:
  • 二、Proactor 模型
    • 核心思想:
    • 工作流程:
    • 关键组件:
    • 典型实现:
  • 三、Reactor vs Proactor 对比
  • 四、知名框架实现
  • 五、总结

Reactor 和 Proactor 是两种经典的事件驱动 I/O 模型,广泛用于高并发网络服务器。它们的核心目标是高效处理大量并发连接,避免传统阻塞 I/O 的线程开销。

一、Reactor 模型

核心思想

当事件就绪时,通知我,我来处理” —— 同步等待事件 + 主动处理

在这里插入图片描述

关键组件:

  • Event:需要处理的事件
  • Reactor:事件管理器,负责注册/注销事件、运行事件循环。
  • Demultiplex:系统级 I/O 多路复用(如 epoll)。
  • Event Handler:用户定义的回调函数。

工作流程:

  1. 事件注册:应用程序将感兴趣的 I/O 事件(如读、写、异常、关闭)注册到 Reactor
  2. 事件循环: Reactor 使用 I/O多路复用器(如 selectpollepoll同步阻塞等待事件就绪
  3. 事件分发:一旦有事件就绪(如 socket 可读),Reactor 回调对应的 Handler(处理函数)。
  4. Handler 执行: 应用程序在 当前线程中同步执行 I/O 操作(如 read())。

典型实现:

  • 单线程 Reactor:一个线程负责所有事件的监听、分发和处理(包括 I/O 操作和业务逻辑)
  • 多线程 Reactor:一个 Reactor 线程负责事件监听和 I/O 操作,多个工作线程(Worker Thread)负责处理业务逻辑,实现 I/O 与业务的分离。
  • 主从 Reactor:多个 Reactor 线程分工协作,主 Reactor(Main Reactor)负责处理连接事件,从 Reactor(Sub Reactor)负责处理已连接 socket 的读写事件,结合工作线程池处理业务。

二、Proactor 模型

核心思想:

你帮我异步完成 I/O,完成后通知我” —— 异步 I/O + 事件通知

工作流程:

  1. 发起异步操作:应用程序调用异步 API(如 Windows 的 ReadFile + IOCP),立即返回
  2. 系统执行 I/O: 操作系统在后台线程/硬件中完成 I/O。
  3. 完成通知:I/O 完成后,系统通过 完成端口(IOCP)将结果投递到队列。
  4. Proactor 分发: Proactor 从完成队列取出事件,调用对应的 Completion Handler

关键组件:

  • Proactor:管理异步操作和完成事件。
  • Asynchronous Operation Processor:操作系统提供的异步 I/O 机制(如 IOCP)。
  • Completion Handler:I/O 完成后的回调。

典型实现:

  • Windows IOCP(Internet Completion Port)
  • Boost.Asio 的 Proactor 模式(可选)

三、Reactor vs Proactor 对比

特性ReactorProactor
I/O 模型同步非阻塞(事件就绪后同步读写)异步 I/O(系统完成后再通知)
事件触发时机就绪事件(可读/可写)完成事件(读完/写完)
操作系统依赖Linux select/poll/epollWindows IOCP,Linux AIO
编程复杂度较低较高
性能(小数据)优秀稍逊(异步开销)
性能(大数据)一般(同步读写可能阻塞)优秀(真正异步)
典型应用Nginx、Netty、Redis、Node.jsWindows 高性能服务器、Boost.Asio

四、知名框架实现

  • Nginx:主从 Reactor(多进程 + epoll)
  • Muduo:主从 Reactor(多线程 + epoll)
  • Netty:多线程 Reactor(默认)
  • Boost.Asio:支持 Reactor 和 Proactor(可切换)

五、总结

模型口诀
Reactor“我等你准备好,我来读写”
Proactor“你去读写,好了告诉我”

Linux 生态推荐 Reactor,Windows 高性能可选 Proactor。

http://www.dtcms.com/a/589455.html

相关文章:

  • MCP概念及NetSuite应用与拓展
  • 深圳外贸网站建设公司帮别人做网站开价
  • 基于nginx的openlab的网站配置
  • web开发,在线%超市销售%管理系统,基于idea,html,jsp,java,ssh,sql server数据库。
  • Linux复习:系统调用与fork
  • 做网站需要哪些成本全屋定制网络平台
  • go-ethereum之rpc
  • 开源模型登顶?Kimi K2 Thinking 实测解析:它真能超越 GPT-5 吗?
  • 积分交易网站开发学院网站整改及建设情况报告
  • 影刀RPA实战:一键生成视频号销售日报,告别手工统计,效率提升10倍![特殊字符]
  • C语言算法:时间与空间复杂度分析
  • 最新选题-基于Hadopp和Spark的国漫推荐系统
  • Rust 练习册 :构建自然语言数学计算器
  • 中专旅游管理专业职业发展指南:从入门到精通的成长路径
  • 视频网站 建设绿化公司网站建设
  • 【Chrono】Cargo.toml 配置文件深度分析
  • 基于深度学习的车载视角路面病害检测系统【python源码+Pyqt5界面+数据集+训练代码】
  • 前端计算精度解决方案:big.js库
  • 珠海网站制作推广公司哪家好王野天个人简介
  • 微前端架构:JavaScript 隔离方案全解析(含 CSS 隔离)概要
  • 敏感性分析(Sensitivity Analysis)在机器学习中的应用详解
  • 北京怀柔做网站管理运营的公司最大的源码分享平台
  • 计算机网络自顶向下方法44——网络层 ICMP:因特网控制报文协议 网络控制与管理协议 管理信息库 NETCONF、YANG
  • Java面向对象实验:类的设计、构造方法重载与图形面积计算
  • 网站有哪些备案青海企业网站建设开发
  • 网站制作公司怎么找定制微信软件
  • autocad2025下载安装教程
  • 在页面上写C#(我的Blazor学习一)
  • 洛阳免费网站建设合肥建筑公司
  • 空间矢量PWM(SVPWM)实战:从原理到MATLAB仿真,优化逆变器输出谐波