IO设计模式:Reactor和Proactor对比
IO设计模式:Reactor和Proactor对比平时接触的开源产品如Redis、ACE,事件模型都使用的Reactor模式;而同样做事件处理的Proactor,由于操作系统的原因,相关的开源产品也少;这里学习下其模型结构,重点对比下两者的异同点; 反应器ReactorReactor模式结构
Reactor包含如下角色: Handle 句柄;用来标识socket连接或是打开文件;Synchronous Event Demultiplexer:同步事件多路分解器:由操作系统内核实现的一个函数;用于阻塞等待发生在句柄集合上的一个或多个事件;(如select/epoll;)Event Handler:事件处理接口Concrete Event HandlerA:实现应用程序所提供的特定事件处理逻辑;Reactor:反应器,定义一个接口,实现以下功能:1)供应用程序注册和删除关注的事件句柄; 2)运行事件循环; 3)有就绪事件到来时,分发事件到之前注册的回调函数上处理; “反应”器名字中”反应“的由来: 业务流程及时序图应用启动,将关注的事件handle注册到Reactor中; 调用Reactor,进入无限事件循环,等待注册的事件到来; 事件到来,select返回,Reactor将事件分发到之前注册的回调函数中处理; 主动器ProactorProactor模式结构Proactor主动器模式包含如下角色 Handle 句柄;用来标识socket连接或是打开文件; Asynchronous Operation Processor:异步操作处理器;负责执行异步操作,一般由操作系统内核实现; Asynchronous Operation:异步操作 Completion Event Queue:完成事件队列;异步操作完成的结果放到队列中等待后续使用 Proactor:主动器;为应用程序进程提供事件循环;从完成事件队列中取出异步操作的结果,分发调用相应的后续处理逻辑; Completion Handler:完成事件接口;一般是由回调函数组成的接口; Concrete Completion Handler:完成事件处理逻辑;实现接口定义特定的应用处理逻辑;应用程序启动,调用异步操作处理器提供的异步操作接口函数,调用之后应用程序和异步操作处理就独立运行;应用程序可以调用新的异步操作,而其它操作可以并发进行; 应用程序启动Proactor主动器,进行无限的事件循环,等待完成事件到来; 异步操作处理器执行异步操作,完成后将结果放入到完成事件队列; 主动器从完成事件队列中取出结果,分发到相应的完成事件回调函数处理逻辑中;
|