Proactor 是一种基于异步 IO 完成事件的并发设计模式:应用发起异步操作后立即返回,操作系统完成读写后通知完成处理器执行业务逻辑。与基于就绪事件的 Reactor 相对,其代表实现有 Windows IOCP 与 Boost.Asio。

| 英文名 | Proactor Pattern |
| 整理者 | 道格拉斯·施密特(POSA2) |
| 事件类型 | IO 完成事件 |
| 对照模式 | Reactor 模式 |
| 代表实现 | Windows IOCP、Boost.Asio |
Proactor 模式(前摄器模式)是一种事件驱动的并发设计模式:应用程序发起异步操作(如异步读)后立即返回,真正的数据搬运由操作系统在后台完成;操作完成后,事件分发器调用对应的完成处理器处理结果。它由道格拉斯·施密特(Douglas Schmidt)等人在《面向模式的软件架构》第二卷中系统总结。
Proactor 常与 Reactor 对照理解:Reactor 基于就绪事件,系统告诉你现在可以读了,读取动作仍由应用自己执行;Proactor 基于完成事件,应用把缓冲区一并交给系统,系统读完数据后才通知你已经读好了。前者是同步非阻塞 IO 的编排方式,后者建立在真正的异步 IO 之上。Windows 的 IO 完成端口(IOCP)是最典型的系统级支持,跨平台库 Boost.Asio 对外呈现的正是 Proactor 接口,Linux 新近的 io_uring 也为该模式提供了高效基础。
Proactor 适合连接数巨大、吞吐要求高的网络服务器与高性能文件 IO,例如 Windows 平台的高并发服务普遍基于 IOCP 构建。由于数据在通知前已放入用户缓冲区,业务代码不必再关心分次读取与就绪判断,逻辑更直接。
问:Proactor 和 Reactor 如何选择?答:取决于平台能力与生态。Linux 上传统主流是 epoll 加 Reactor(如 Netty、Nginx),Windows 上首选 IOCP 加 Proactor;追求极致吞吐且内核较新时可考虑基于 io_uring 的方案。
问:Proactor 的主要难点是什么?答:缓冲区生命周期管理。缓冲区在操作完成前必须保持有效且不被复用,回调链路也比同步代码更难调试,通常依赖成熟库来屏蔽这些细节。

| 英文名 | Proactor Pattern |
| 整理者 | 道格拉斯·施密特(POSA2) |
| 事件类型 | IO 完成事件 |
| 对照模式 | Reactor 模式 |
| 代表实现 | Windows IOCP、Boost.Asio |
登录 后参与讨论
暂无讨论,来发表第一条评论吧