reactor設計模式

2021-09-04 16:11:05 字數 1242 閱讀 4079

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模式,代替常用的多執行緒的處理方式,節省系統的資源,提高系統...