首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >System|IO|Proactor

System|IO|Proactor

作者头像
朝闻君
发布2021-11-22 10:36:08
发布2021-11-22 10:36:08
3910
举报

Reference: https://www.dre.vanderbilt.edu/~schmidt/PDF/Proactor.pdf

Proactor是常见的网络AIO模型。和Reactor的区别在于同步/异步。问题在于windows没有好的NIO,而Linux又没动力实现AIO,所以Reactor占多数。

与Reactor模式的对比见

静态

  • Proactive Initiator - 应用程序
  • Completion Handler - 事件处理函数
  • Asynchronous Operation - OS提供的AIO原语
  • Asynchronous Operation Processor - OS
  • Completion Dispatcher - 当事件完成时执行callback

动态

  • 应用层确定Dispatcher和Handler
  • 应用层向OS注册AIO、Handler以及所属的Dispatcher
  • OS执行AIO
  • AIO执行完成后OS通知Dispatcher
  • Dispatcher执行对应的Handler

示例

连接

特殊的Handler名为Acceptor。Acceptor本身负责监听特定的端口(如80),用于创建socket连接。Acceptor特殊在Handler能够注册新的Handler。

注册AIO accept->accpet完成->回调处理create->注册AIO read

IO

已注册的AIO read->read完成->回调处理read文件->注册AIO write->write完成->响应

异步IO都是操作系统负责将数据读写到应用传递进来的缓冲区供应用程序操作。

总结

异步明显比同步复杂很多,OS能够直接把数据从kernel buffer扔进用户buffer,而相比较而言,Reactor仅仅是获知数据准备好了,想要获取数据还需要再进行同步读取。

在性能上异步应该是有一定优势的,但是Linux直接用epoll模拟AIO,所以在Linux上做Proactor是多此一举,服务器依然以Reactor为主流。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 静态
  • 动态
  • 示例
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档