reactor模式和Proactor模式
最近在研究boost异步io,但是具体原理还是很混乱,现在理清一下思路,对普通函数和reactor模式和proactor模式进行比较 普通函数处理机制: 程序调用接口函数 -> 函数执行,程序等待 -> 函数执行完将结果和控制权返回给程序 ->程序继续执行 下面具体来分析下reactor模式和proactor模式 reactor模式(反应堆模式): reactor模式是事件驱动模式,应用程序不主动调用某个API完成处理,而是应用程序需要提供相应的接口函数(回调函数)并注册接口函数和事件(io/read/write)到Reactor上,如果相应的事件发生,Reactor将主动调用应用程序注册的接口函数(回调函数) 在Reactor中,事件分离器负责等待文件描述符或socket为读写操作准备就绪,然后将就绪事件传递给对应的处理器,最后由处理器负责完成实际的读写工作。
Proactor模式和reactor模式的都是事件驱动的,不同之处在于: 异步情况下(Proactor),当回调handler时,表示IO操作已经完成;同步情况下(Reactor),回调handler时,表示IO设备可以进行某个操作(can read or can write)。 Reactor框架中用户定义的操作是在实际操作之前调用的。比如你定义了操作是要向一个SOCKET写数据,那么当该SOCKET可以接收数据的时候,你的操作就会被调用;而Proactor框架中用户定义的操作是在实际操作之后调用的。比如你定义了一个操作要显示从SOCKET中读入的数据,那么当读操作完成以后,你的操作才会被调用。
以读操作为例: 在Reactor中实现读: - 注册读就绪事件和相应的事件处理器
在Proactor中实现读: - 处理器发起异步读操作(注意:操作系统必须支持异步IO)。在这种情况下,处理器无视IO就绪事件,它关注的是完成事件。 - 事件分离器等待操作完成事件 - 在分离器等待过程中,操作系统利用并行的内核线程执行实际的读操作,并将结果数据存入用户自定义缓冲区,最后通知事件分离器读操作完成。 - 事件分离器呼唤处理器。 - 事件处理器处理用户自定义缓冲区中的数据,然后启动一个新的异步操作,并将控制权返回事件分离器。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |