zoukankan      html  css  js  c++  java
  • 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程序猿指南》

  • 相关阅读:
    HDU 1009 FatMouse' Trade
    HDU 2602 (简单的01背包) Bone Collector
    LA 3902 Network
    HDU 4513 吉哥系列故事——完美队形II
    LA 4794 Sharing Chocolate
    POJ (Manacher) Palindrome
    HDU 3294 (Manacher) Girls' research
    HDU 3068 (Manacher) 最长回文
    Tyvj 1085 派对
    Tyvj 1030 乳草的入侵
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4253251.html
Copyright © 2011-2022 走看看