ACE_Proactor框架
2015-10-20 12:12
176 查看
Proactor的模型允许以下两个阶段来执行IO模型而无须等待它们完成:
(1)不须等待它们完成,应用就可以在多个IO句柄上并行地发起一个或多个异步IO操作
(2)在每个操作完成时,OS会通知应用定义的完成处理器,由它随后对已完成的IO操作的结果进行处理。
而reactor的模型,这两个阶段是刚好相反的:
(1)使用一个事件多路分离器来确定某个IO操作何时可以进行,并且有可能即使完成
(2)同步地执行操作。
ACE_Proactor框架对以下操作负责:
- 发起异步IO操作
- 保存每个操作的参数,并将它们中继到完成处理器。
- 等待表明这些操作完成的完成事件
- 将完成事件多路分离给其相关的完成处理器
- 分派处理器的挂钩方法,通过应用定义的方式来处理事件。
相关类:
ACE_Handle:定义于接受异步IO操作的结果和处理定时器到期的借口。
ACE_Async_Read/Write_Stream、ACE_Async_Result:在IO流上发起异步读写操作,将其与用于接收这些行为的结果的ACE_Handler对象相关联。
ACE_Aynch_Acceptor/Connector:Acceptor-Connector模式,建立新的TCP/IP异步连接。
ACE_Service_handler:定义Acceptor和Connector连接工厂的目标,并提供挂钩方法来初始化一个通过TCP/IP连接的服务。
ACE_Procator:管理定时器和异步IO完成事件多路分离。类似于ACE_Reactor.
ACE_Proactor也和ACE_Reactor一样是白盒框架,不过其网络应用事件处理器必须派生自ACE_Handle,例如ACE_Service_Handler,对应的ACE_Reactor的事件处理器则必须是ACE_Event_Handler。
前摄式与反应式IO的主要区别:前摄式IO的发起和完成时分别发生的两个不同步骤。
ACE_Messag_Block反人类设计:使用写指针用于读和将读指针用于写。这样思考:在读数据时,他从消息块中被写入。同样的,在写数据时,它被用来读取消息块。因此在读完之后,ACE_Message_Block更新后的数据长度会变大(因为写指针已前移),在写完成(因为读指针已前移)时会变小。
前摄式的Acceptor和Connector的类前面都有Asynch和反应式的作区分。
Acceptor的open方法,初始化进行侦听tcp socket,并发起一个或多个异步accept操作。
从实际来看,最重要的是:将IO句柄,ACE_Handler对象以及ACE_Proactor绑定起来。至于那些辅助类中对于回调的接口设置,大都是对于应用的合理抽象,比如ACE_Service_Handler的open方法就是用于新连接建立后的初始化之用的回调函数。
(1)不须等待它们完成,应用就可以在多个IO句柄上并行地发起一个或多个异步IO操作
(2)在每个操作完成时,OS会通知应用定义的完成处理器,由它随后对已完成的IO操作的结果进行处理。
而reactor的模型,这两个阶段是刚好相反的:
(1)使用一个事件多路分离器来确定某个IO操作何时可以进行,并且有可能即使完成
(2)同步地执行操作。
ACE_Proactor框架对以下操作负责:
- 发起异步IO操作
- 保存每个操作的参数,并将它们中继到完成处理器。
- 等待表明这些操作完成的完成事件
- 将完成事件多路分离给其相关的完成处理器
- 分派处理器的挂钩方法,通过应用定义的方式来处理事件。
相关类:
ACE_Handle:定义于接受异步IO操作的结果和处理定时器到期的借口。
ACE_Async_Read/Write_Stream、ACE_Async_Result:在IO流上发起异步读写操作,将其与用于接收这些行为的结果的ACE_Handler对象相关联。
ACE_Aynch_Acceptor/Connector:Acceptor-Connector模式,建立新的TCP/IP异步连接。
ACE_Service_handler:定义Acceptor和Connector连接工厂的目标,并提供挂钩方法来初始化一个通过TCP/IP连接的服务。
ACE_Procator:管理定时器和异步IO完成事件多路分离。类似于ACE_Reactor.
ACE_Proactor也和ACE_Reactor一样是白盒框架,不过其网络应用事件处理器必须派生自ACE_Handle,例如ACE_Service_Handler,对应的ACE_Reactor的事件处理器则必须是ACE_Event_Handler。
前摄式与反应式IO的主要区别:前摄式IO的发起和完成时分别发生的两个不同步骤。
ACE_Messag_Block反人类设计:使用写指针用于读和将读指针用于写。这样思考:在读数据时,他从消息块中被写入。同样的,在写数据时,它被用来读取消息块。因此在读完之后,ACE_Message_Block更新后的数据长度会变大(因为写指针已前移),在写完成(因为读指针已前移)时会变小。
前摄式的Acceptor和Connector的类前面都有Asynch和反应式的作区分。
Acceptor的open方法,初始化进行侦听tcp socket,并发起一个或多个异步accept操作。
从实际来看,最重要的是:将IO句柄,ACE_Handler对象以及ACE_Proactor绑定起来。至于那些辅助类中对于回调的接口设置,大都是对于应用的合理抽象,比如ACE_Service_Handler的open方法就是用于新连接建立后的初始化之用的回调函数。
相关文章推荐
- 【jstl&el】jstl和EL的区别和使用
- 一切都是对象
- 《自己动手写网络爬虫》读书笔记
- 【总结】 2015 ACM-ICPC Asia Changchun Regional Contest
- php 加速器eaccelerator-0.9.6.1 安装及配置
- C# UDP编程(通过类UdpClient实现收发)
- 简单的Socket消息转发实现
- php上传大文件失败的原因及应对策略
- yii2 i18n
- 使用Xcode和Instruments调试解决iOS内存泄露
- ACE相关的Proactor Pattern
- ACE常用的Strategized Locking Pattern
- css transition过渡
- php获取客户端ip和服务器端ip
- delete数组实现
- JAVA的Date类与Calendar类【转】
- android 下如何动态加载触摸屏驱动
- 【系统相册】Android 保存图片到系统相册
- 加密类型及其相关算法
- maven权威指南archetype:create报错解决