reactor设计模式
来源:互联网 发布:arena软件下载 编辑:程序博客网 时间:2024/06/09 00:08
reactor设计模式
reactor设计模式,是一种基于事件驱动的设计模式。
《Pattern-Oriented Software Architecture, Volume 2》
对这个模式做了详细的讲解。
这个模式的结构图如下:
图中的handle对应的是操作系统提供的句柄,例如I/O句柄,Event_Handler类持有这些句柄,
reactor类内部提供一个事件循环:handle_events(),事件循环的代码实现利用了操作系统提供的多路分离函数,
WaitForMultipleObjects或者select等,这些多路分离的函数的特点是,可以同时等待多个句柄,在等待过程中所在
线程属于挂起状态,不消耗CPU时间,一旦某个句柄被触发,则线程被唤醒,函数将返回,线程可以执行后面的代码,
利用多路分离函数的这一特点,根据被激活的句柄对应的特定事件,调用相关的事件处理函数。可以实现事件循环。
register_handler()函数用于将Event_Handler对象注册到事件驱动列表
中,保证对于某一类型的事件,会调用Event_Handler类的响应函数handle_event()。
reactor类在做多路分离时需要操纵Event_Handler类的Handle,因此Event_Handler类需要提供get_handle()函数。
另外,当程序不需要再对特定事件响应时,需要把Event_Handler对象从事件驱动列表中删除,因此reactor类还实现了
remove_handler函数。
因为reactor相对稳定,一旦实现,不需要再定制,所以没有提供一个抽象接口类,但Event_Handler是经常需要根据不同
的需求定制的,因此需要提供一个抽象接口类,然后根据实际需求编写派生类,提供具体句柄,并实现相关虚函数。
这个模式的优点是本身不涉及多线程,从而避免了线程的上下文切换。
对于响应事件处理时间较短的情况下,可以考虑使用这个模式。
如果处理一个事件需要花费大量时间,就不能使用这个模式,那样会导致其他事件处理被阻塞。
ACE_Reactor框架是这一模式的半成品,用户只要做三件事情就可以实现并使用这一模式:
1.从ACE_Event_Handler派生一个或多个类
2.向ACE_Reactor类登记应用的事件处理对象
3.运行ACE_Reactor事件循环。
示例代码可以参考ACE_wrappers/examples/APG/Reactor目录下的示例代码。
参考文献:
《Pattern-Oriented Software Architecture, Volume 2》
《ACE程序员指南》
转载地址:http://blog.csdn.net/swordmanwk/article/details/6170995- reactor设计模式
- reactor设计模式
- Reactor设计模式
- reactor设计模式 1
- reactor设计模式
- Reactor设计模式详解
- 设计模式--reactor
- 设计模式--reactor(2)
- Reactor设计模式
- Reactor设计模式基础知识
- Reactor设计模式
- java设计模式-reactor模式
- NIO与Reactor设计模式
- 设计模式 reactor和proactor
- 设计模式 reactor和proactor
- 设计模式 reactor和proactor
- 设计模式之reactor、proactor
- 设计模式 reactor和proactor
- XMLHTTPRequest的方法和属性介绍
- C++指针直接调用类成员函数探讨
- HashMap中keySet()以及values()方法的使用
- 【Cocos2d-x】源码分析之 2d/ui/Widget
- UVa OJ 127 - "Accordian" Patience (“手风琴”纸牌)
- reactor设计模式
- linux读取配置文件(C语言版)
- 黑马程序员_Java基础加强_内省
- Linux判断进程是否存在并启动该进程
- 网页编程.笔记3:符号实体,超链接,表格,上标与下标
- javascript的继承,一个简单的乒乓球游戏
- Two-phase Termination 把玩具收拾好再去睡觉。
- 关于php traits
- EditPuls3.6中使用技巧(2)