慎用Reactor Notify機制

        在Reactor的模式,有一種輔助的通知機制Notify機制,簡單說就是通過通知發起者調用 notify函數,notify的消息被保存在一個管道中,handle_event的處理中會檢查這個管道中是 否有通知數據,如果有就根據通知的消息,會根據默認的通知消息的類型去調用hanle_input等函數。

        ACE Reactor的默認Notify方式採用的是ACE_Pipe ,ACE_Pipe是一個跨平臺的管道實現。標準情況來講,採用的實現,但是在最大的兩個平臺Windows和Linux上,ACE的實現是採用的Socket實現。很多管道特性所特有的東西,在這兩個平臺上是無法使用ACE_Pipe實現的。比如,管道的特性可以保證在暫時沒有接受者的情況下使用,而Socket是不可能有這個特性的。你必須保證先有接受者,後有發送者的時序。

        可以通過定義ACE_HAS_REACTOR_NOTIFICATION_QUEUE的宏編譯ACE,這樣ACE將不使用ACE_Pipe作爲Notify消息的管道,而使用一個自己的內存隊列保存Notify消息,這個隊列是動態擴展的。而且由於是內存操作,性能方面沒有太大問題。

大體位置在重複編譯定義後面,#include /**/ "ace/pre.h"前面。保證這個宏起到作用。 
#ifndef ACE_CONFIG_LINUX_H 
#define ACE_CONFIG_LINUX_H 
 
//使用內存隊列作爲Notify Queue 
#define ACE_HAS_REACTOR_NOTIFICATION_QUEUE 
 
#include /**/ "ace/pre.h" 


          That being said, the standard C++ containers are recommended for application development when you are using ACE.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章