System|IO|Proactor
2023-03-15 22:01:42 时间
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为主流。
相关文章
- macOS新版本终于删掉自带Python2,这波操作连Python死忠粉都叫好
- Jemeter控制器实现脚本逻辑
- 计算机语言
- python基础__十大经典排序算法
- python基础_日常高频用法
- python基础__全局变量
- python进阶__struct数据处理详解
- python进阶__用socket封装TCP
- python进阶__常用的进制、字符串、字节之间的转换
- python基础__encode编码+decode解码
- python基础__re正则表达式
- python基础__装饰器(修饰器)
- python必备基础
- python进阶__实现UDP通信
- pytest.main( )参数大全和装饰器
- cmd下执行pytest报错找不到文件模块
- python小技巧
- python中文官方文档记录
- 屏幕刷新机制 Choreographer 原理分析
- 补间动画源码中分析机制原理