知识卡片
Reactor与Proactor的主被动之分
内容
Reactor(主动)中应用不断轮询I/O是否就绪,实际读写仍由应用自己执行——select/poll/epoll、Java NIO属此类。Proactor(被动)中应用把read/write委托给系统/框架,完成后回调通知——C++ asio是典型。”异步I/O”即Proactor。发散:与[[阻塞非阻塞与同步异步是两个维度]]是同一件事两面——Reactor对应同步,Proactor对应异步。
参考来源
- 位置:第4章《操作系统》4.3.2节「Reactor模式与Preactor模式」(源文件:_epub-src/text/part0011.html)
- 结论依据:原文明确定义Reactor为主动模式——应用程序不断轮询I/O是否就绪、实际I/O操作仍由应用程序执行(select/poll/epoll、Java NIO属此类);Proactor为被动模式——应用程序把read/write操作交给系统或框架完成后再回调(asio库典型),且应用层所说的'异步I/O'正是Proactor模式,直接支持卡片论述。
- 原始内容:"Reactor模式:主动模式。所谓主动,是指应用程序不断地轮询……实际的I/O操作还是应用程序执行的……Proactor模式:被动模式。应用程序把read和write函数操作全部交给操作系统或者网络框架……上文提到的应用层面的语境中所说的'异步I/O'是Proactor模式。"