IO设计模式:Reactor和Proactor对比
IO设计模式:Reactor和Proactor对比平时接触的开源产品如Redis、ACE,事件模型都使用的Reactor模式;而同样做事件处理的Proactor,由于操作系统的原因,相关的开源产品也少;这里学习下其模型结构,重点对比下两者的异同点; 反应器ReactorReactor模式结构Reactor包含如下角色:
“反应”器名字中”反应“的由来: 业务流程及时序图
主动器ProactorProactor模式结构Proactor主动器模式包含如下角色
业务流程及时序图
对比两者的区别主动和被动以主动写为例: 可以看出,Reactor被动的等待指示事件的到来并做出反应;它有一个等待的过程,做什么都要先放入到监听事件集合中等待handler可用时再进行操作; 实现Reactor实现了一个被动的事件分离和分发模型,服务等待请求事件的到来,再通过不受间断的同步处理事件,从而做出反应; Proactor实现了一个主动的事件分离和分发模型;这种设计允许多个任务并发的执行,从而提高吞吐量;并可执行耗时长的任务(各个任务间互不影响) 优点Reactor实现相对简单,对于耗时短的处理场景处理高效; Proactor性能更高,能够处理耗时长的并发场景; 缺点Reactor处理耗时长的操作会造成事件分发的阻塞,影响到后续事件的处理; Proactor实现逻辑复杂;依赖操作系统对异步的支持,目前实现了纯异步操作的操作系统少,实现优秀的如windows IOCP,但由于其windows系统用于服务器的局限性,目前应用范围较小;而Unix/Linux系统对纯异步的支持有限,应用事件驱动的主流还是通过select/epoll来实现; 适用场景Reactor:同时接收多个服务请求,并且依次同步的处理它们的事件驱动程序; 类图和序列图的源文件提供下载,详见Github《图说设计模式》的EA文档: https://github.com/me115/design_patterns 参考《面向模式的软件体系结构 卷2》 Posted by: 大CC | 27APR,2015 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- osx 环境编译 sqlite-autoconf-3081002.zip
- 在C中读取csv文件时如何处理NaN
- Flex中ByteArray与BitmapData互相转换实现图片的二进制保存
- 使用记事本根据XSD验证XML
- c – 强制删除boost :: signals2中的插槽
- strongloop – Loopback模型中的动态属性或聚合函数
- CocoaPods安装教程
- Flex中双击事件MouseEvent.DOUBLE_CLICK不起作用的解决办法
- 在OS X 10.11上启动Swift Cocoa应用程序
- cocos2d-x3.10java.lang.UnsatisfiedLinkError: Couldn'