I/O并发模式:Reactor模式与Proactor模式
来源:互联网 发布:网络赚钱 编辑:程序博客网 时间:2024/06/08 06:57
要理解这两个模式还是有点困难。从网上找了几篇关于这两个模式的讲解,特此在这里记录下。看了很多总感觉不能深入精髓,可能实际经验太少。希望日后自己自己能理解的很好了,再来好好总结下。以下是别人的一些总结:
首先最好拜读下《Unix网络编程第一卷:套接口API》第6章关于I/O模型的讲解非常经典,首先搞清楚何为阻塞和非阻塞,何为同步和异步。
- Reactor模式
- Proactor介绍和应用实例
- 高性能IO设计的Reactor和Proactor模式
- 高性能I/O设计模式Reactor和Proactor
- Linux——epoll
- Linux下tcp并发服务器的几种设计的模式套路
《高性能IO设计的Reactor和Proactor模式》关于阻塞非阻塞,同步异步的讲解,以及Reactor和Proactor的区别比较清晰。
1、Reactor模式
Reactor释义“反应堆”,是一种事件驱动机制。和普通函数调用的不同之处在于:应用程序不是主动的调用某个API完成处理,而是恰恰相反,Reactor逆置了事件处理流程,应用程序需要提供相应的接口并注册到Reactor上,如果相应的时间发生,Reactor将主动调用应用程序注册的接口,这些接口又称为“回调函数”。使用Libevent也是想Libevent框架注册相应的事件和回调函数;当这些时间发声时,Libevent会调用这些回调函数处理相应的事件(I/O读写、定时和信号)。
用“好莱坞原则”来形容Reactor再合适不过了:不要打电话给我们,我们会打电话通知你。
2、两个模式简单对比
两个模式的相同点:(1)都是对某个IO事件的事件通知(即告诉某个模块,这个IO操作可以进行或已经完成)。(2)在结构上的相同点:demultiplexor负责提交IO操作(异步)、查询设备是否可操作(同步),然后当条件满足时,就回调handler。
不同点在于:异步情况下(Proactor),当回调handler时,表示IO操作已经完成;同步情况下(Reactor),回调handler时,表示IO设备可以进行某个操作(can read or can write),handler这个时候开始提交操作。
我的理解:两者的根本区别就在于《Unix网络编程第一卷:套接口API》第6章讲解的五种I/O模型,Proactor是基于异步I/O,Reactor是同步I/O(一般是I/O复用)。但是现在的操作系统并不是都能很好的真正支持异步I/O,比如Windows里有真正的异步I/O——IOCP,而Unix、Linux并没有真正实现异步I/O。所以考虑程序移植性以及现在很多服务器基于Unix,Linux;Proactor封装了这种差异,在内部异步事件分离器实现时根据系统的不同调用相应的I/O模式。
- I/O并发模式:Reactor模式与Proactor模式
- I/O并发模式:Reactor模式与Proactor模式
- I/O并发模式:Reactor模式与Proactor模式 总价
- 两种高性能I/O模式 reactor & proactor
- I/O 设计模式 Reactor 和 Proactor
- 两种高性能I/O设计模式reactor与proactor
- reactor与proactor模式
- reactor模式与proactor模式
- 高性能I/O设计模式Reactor和Proactor
- (zt)高性能I/O设计模式Reactor和Proactor
- 高性能I/O设计模式Reactor和Proactor
- 高性能I/O设计模式Reactor和Proactor
- 两种高性能I/O设计模式(Reactor/Proactor)的比较
- 两种高性能I/O设计模式(Reactor/Proactor)的比较
- 两种高性能I/O设计模式(Reactor/Proactor)的比较
- 两种高性能I/O设计模式(Reactor/Proactor)的比较
- 两种高性能I/O设计模式(Reactor/Proactor)的比较
- 两种高性能I/O设计模式(Reactor/Proactor)的比较
- 回顾2013:HBase的提升与挑战
- Spring Security教程(6)---- 使用数据库管理用户及权限
- IoC/DIP其实是一种管理思想
- Cognos 用户无法创建Schedule
- msdn中windows service例子
- I/O并发模式:Reactor模式与Proactor模式
- golang编译调试选项
- 今天开始写文章,记笔记
- 字符串比较--strcasecmp()和strncasecmp()
- Struts遍历标签<s:iterator>总结
- nyoj 385-取石子(五)(斐波那契博弈问题)
- 如何编写nand flash 驱动
- cocos2dx之弧度和角度的互换
- 象与骑象人-幸福的假设