• reactor设计模式


    reactor设计模式,是一种基于事件驱动的设计模式。

    《Pattern-Oriented Software Architecture, Volume 2》

    对这个模式做了具体的解说。

    这个模式的结构图例如以下:

    reactor模式类结构图

    图中的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程序猿指南》

  • 相关阅读:
    前端试题本(Javascript篇)
    前端知识杂烩(Javascript篇)
    前端知识杂烩(HTML[5]?+CSS篇)
    Javascript实现的数组降维——维度不同,怎么谈恋爱
    你不知道的CSS背景—css背景属性全解
    基于Codeigniter框架实现的APNS批量推送—叮咚,查水表
    CSS布局经典—圣杯布局与双飞翼布局
    JavaScript异步编程的主要解决方案—对不起,我和你不在同一个频率上
    CSS实现元素水平垂直居中—喜欢对称美,这病没得治
    JS实现常用排序算法—经典的轮子值得再造
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4007357.html
Copyright © 2020-2023  润新知