(PECL event >= 1.2.6-beta)
EventBase 類別代表 libevent 的事件基礎結構。它持有一組事件,並且可以輪詢以確定哪些事件處於活動狀態。
每個事件基礎都有一個用於確定哪些事件已準備好的 _方法_ 或 _後端_。辨識的方法有:select
、poll
、epoll
、kqueue
、devpoll
、evport
和 win32
。
要設定要使用的事件基礎,或者要避免使用特定的後端,可以使用 EventConfig 類別。
只要尚未釋放關聯 Event
物件的資源,就 _不要_ 銷毀 EventBase 物件。否則,將會導致無法預測的結果!
$cfg
= ?)EventBase::LOOP_ONCE
與 EventBase::loop() 方法一起使用的旗標,表示:「阻塞直到 libevent 有一個活動事件,然後在所有活動事件的回呼都執行完畢後退出」。
EventBase::LOOP_NONBLOCK
與 EventBase::loop() 方法一起使用的旗標,表示:「不要阻塞:查看現在哪些事件已準備好,執行最高優先級事件的回呼,然後退出」。
EventBase::NOLOCK
配置旗標。即使我們已設定鎖定,也不要為事件基礎配置鎖定。
EventBase::STARTUP_IOCP
僅限 Windows 的配置旗標。在啟動時啟用 IOCP 調度器。
EventBase::NO_CACHE_TIME
配置旗標。不要在每次事件迴圈準備好執行逾時回呼時都檢查目前時間,而是在每個逾時回呼之後檢查。
EventBase::EPOLL_USE_CHANGELIST
如果我們使用 epoll
後端,這個旗標表示可以使用 Libevent 的內部變更列表程式碼來批次處理新增和刪除,以盡可能減少系統呼叫的次數。
設定此旗標可以使程式碼執行得更快,但它可能會觸發 Linux 錯誤:如果任何檔案描述符被 dup() 或其變體複製,則使用此旗標是不安全的。這樣做會產生奇怪且難以診斷的錯誤。
也可以透過設定 EVENT_EPOLL_USE_CHANGELIST
環境變數來啟用此旗標。
如果最終使用 epoll
以外的後端,則此旗標無效。