reactor設計模式

2021-09-06 18:33:06 字數 1247 閱讀 6066

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事件迴圈。

參考文獻:

《pattern-oriented software architecture, volume 2》

《ace程式猿指南》

reactor設計模式

reactor設計模式,是一種基於事件驅動的設計模式。pattern oriented software architecture,volume 2 對這個模式做了詳細的講解。這個模式的結構圖如下 圖中的handle對應的是作業系統提供的控制代碼,例如i o控制代碼,event handler類持有...

設計模式 reactor

先看個段子吧,更好理解 reactor這個詞譯成漢語還真沒有什麼合適的,很多地方叫反應器模式,但更多好像就直接叫reactor模式了,其實我覺著叫應答者模式更好理解一些。通過了解,這個模式更像乙個侍衛,一直在等待你的召喚,或者叫召喚獸。併發系統常使用reactor模式,代替常用的多執行緒的處理方式,...

Reactor設計模式

reactor這個詞譯成漢語還真沒有什麼合適的,很多地方叫反應器模式,但更多好像就直接叫reactor模式了,其實我覺著叫應答者模式更好理解一些。通過了解,這個模式更像乙個侍衛,一直在等待你的召喚,或者叫召喚獸。併發系統常使用reactor模式,代替常用的多執行緒的處理方式,節省系統的資源,提高系統...