12.Linux 高效能伺服器程式設計 --- 高效能 IO 框架庫 Libevent
阿新 • • 發佈:2019-02-04
1.控制代碼 IO框架庫要處理的物件,即 IO事件,訊號和定時事件,統一稱為事件源。 一個事件源通常和一個控制代碼綁在一起。控制代碼的作用是,當核心檢測到就緒事件時,它將通過 控制代碼來通知應用程式這一事件。Linux 下,IO事件對應的控制代碼就是檔案描述符,訊號事件對應的 控制代碼就是訊號值。 2.事件多路分發器 事件的到來是隨機的,非同步的。我們無法預知程式何時收到一個客戶連線請求,亦或者收到一個暫停訊號。 所以程式需要迴圈的等待並處理事件,這就是事件迴圈。在事件迴圈中,等待事件一般使用IO複用技術來實現。 IO 框架庫一般將系統支援的各種IO複用系統呼叫封裝成統一的介面,稱為事件多路分發器。事件多路分發器的 demultiplex 方法是等待事件的核心函式,起內部呼叫的是 select, poll, epoll_wait 等函式. 3.事件處理器/具體事件處理器 事件處理器執行事件對應的業務邏輯。它通常包含一個或者多個 handle_event 回撥函式,這些回撥函式在事件迴圈中被執行。 IO框架庫提供的事件處理器通常是一個介面,使用者需要繼承它來實現自己的事件處理器,即具體事件處理器。因此,事件處理器中的 回撥函式一般被宣告為虛擬函式,以支援使用者的擴充套件。 4.Reactor Reactor 是 IO 框架庫的核心。它提供的幾個主要方法是: handle_events.該方法執行事件迴圈。它重複如下過程:等待事件,然後依次處理所有就緒事件對應的事件處理器。 register_handler. 該方法呼叫事件多路分發器的 register_event 方法來往事件多路分發器中註冊一個事件。 remove_handle. 該方法呼叫事件多路分發器的 remove_event 方法來刪除事件多路分發器中的一個事件。