1. 程式人生 > >翻譯:libevent參考手冊第二章:建立event_base (四) (轉)

翻譯:libevent參考手冊第二章:建立event_base (四) (轉)

呼叫event_config_avoid_method()可以通過名字讓libevent避免使用特定的可用後端。呼叫event_config_require_feature()讓libevent不使用不能提供所有指定特徵的後端。呼叫event_config_set_flag()讓libevent在建立event_base時設定一個或者多個將在下面介紹的執行時標誌。

event_config_require_features()可識別的特徵值有

v EV_FEATURE_ET:要求支援邊沿觸發的後端

v EV_FEATURE_O1:要求新增、刪除單個事件,或者確定哪個事件啟用的操作是O(1)複雜度的後端

v EV_FEATURE_FDS:要求支援任意檔案描述符,而不僅僅是套接字的後端

event_config_set_flag()可識別的選項值有

v EVENT_BASE_FLAG_NOLOCK:不要為event_base分配鎖。設定這個選項可以為event_base節省一點用於鎖定和解鎖的時間,但是讓在多個執行緒中訪問event_base成為不安全的。

v EVENT_BASE_FLAG_IGNORE_ENV:選擇使用的後端時,不要檢測EVENT_*環境變數。使用這個標誌需要三思:這會讓使用者更難除錯你的程式與libevent的互動。

v EVENT_BASE_FLAG_STARTUP_IOCP:僅用於Windows,讓libevent在啟動時就啟用任何必需的IOCP分發邏輯,而不是按需啟用。

v EVENT_BASE_FLAG_NO_CACHE_TIME:不是在事件迴圈每次準備執行超時回撥時檢測當前時間,而是在每次超時回撥後進行檢測。注意:這會消耗更多的CPU時間。

v EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST:告訴libevent,如果決定使用epoll後端,可以安全地使用更快的基於changelist的後端。epoll-changelist後端可以在後端的分發函式呼叫之間,同樣的fd多次修改其狀態的情況下,避免不必要的系統呼叫。但是如果傳遞任何使用dup()或者其變體克隆的fd給libevent,epoll-changelist後端會觸發一個核心bug,導致不正確的結果。在不使用epoll後端的情況下,這個標誌是沒有效果的。也可以通過設定EVENT_EPOLL_USE_CHANGELIST環境變數來開啟epoll-changelist選項。

上述操作event_config的函式都在成功時返回0,失敗時返回-1。

注意

設定event_config,請求OS不能提供的後端是很容易的。比如說,對於libevent 2.0.1-alpha,在Windows中是沒有O(1)後端的;在Linux中也沒有同時提供EV_FEATURE_FDS和EV_FEATURE_O1特徵的後端。如果建立了libevent不能滿足的配置,event_base_new_with_config()會返回NULL。

2.3 介面