您的位置:首页 > 其它

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方法就是用于新连接建立后的初始化之用的回调函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: