reactor和proactor的好处和坏处。为什么要用reactor而不用 proactor?

Reactor:

同步非阻塞 IO + 事件多路复用(select/poll/epoll/kqueue)。

事件就绪后回调业务处理函数,业务代码自己调用 read/write

优点:

逻辑简单,容易调试。事件来了,应用自己去读写,流程直观。

跨平台兼容性好。epoll(linux)、kqueue(bsd)、IOCP(windows 也可以模拟 reactor)。

不需要操作系统支持异步 IO

缺点:

事件就绪只是 "内核缓冲区有数据",真正 read/write 仍然是系统调用,有少量开销。

如果业务回调里写阻塞操作,整个 Reactor 线程会被卡住

所以 Reactor 要求回调函数必须非阻塞。

Proactor:

异步 IO(AIO)模型

应用提前发起异步读 / 写请求,交给内核

内核自己完成数据拷贝(内核缓冲区 ↔ 用户缓冲区)

数据传输全部完成之后,内核通知应用:操作完成了

优点:

真正异步:数据拷贝由内核完成,应用收到通知时数据已经在用户内存里,不再需要 read/write 系统调用。理论上性能上限更高。

不会因为等待 IO 占用线程,线程专注业务计算。

缺点:

跨平台极差。Windows IOCP 成熟;Linux 原生 AIO 对 socket 支持差,bug 多,很多场景不可用。

模型复杂,调试困难。读写操作提前提交,缓冲区生命周期管理非常麻烦,容易内存越界、内存泄漏。

很难实现协议解析:比如 http,读到部分数据就要解析,Proactor 必须一次性读完预设长度才通知。

为什么很多项目选 Reactor,不用 Proactor?

1.Linux 没有成熟可用的 Proactor

2.Reactor 更容易开发、维护、排坑

3.Reactor 的性能足够绝大多数场景

相关推荐
Moment15 分钟前
AI 编程时代,聊聊我的 Mac mini 双屏桌面
前端·后端
学长毕设1 小时前
基于SpringBoot的游乐园管理系统-附源码
java·spring boot·后端
橙序员小站2 小时前
Windows 安装包反复报错?一次排查补上了 5 个 CI 检查点
后端
陈随易2 小时前
Cloudflare 出钱,Vite 团队挑人,44 个维护者分 30 万美元
前端·后端·程序员
SimonKing2 小时前
震惊:怎么回事,opencode一轮对话耗尽免费额度
java·后端·程序员
张彦峰ZYF2 小时前
功能齐了不等于能上线:智能工单系统的AI回归测试、安全防护、成本可观测与CI/CD生产部署
后端·企业智能工单系统·评测线·安全线·成本线·部署线
Rain的Java大神之路2 小时前
LeetCode 37 解数独面试攻略:回溯 + 位掩码 + MRV,从暴力到毫秒级求解
java·后端·leetcode
量化分析码农3 小时前
【Python量化波动率实战 05】你的组合真的分散了吗:滚动相关与分散化收益
后端
IT_陈寒3 小时前
Vue这个奇葩的响应式问题让我加班到凌晨
前端·人工智能·后端
脚本自动化开发10 小时前
存储涨价后,磐镭WO5迷你主机值得买吗
后端