epoll

维基百科,自由的百科全书
跳转至: 导航搜索

於Linux 2.5.44首度登場的epollLinux核心的可擴展I/O事件通知機制[1]。它設計目的只在取代既有POSIX select(2)poll(2)系統函式,讓需要大量操作檔案描述子的程式得以發揮更優異的性能(舉例來說:舊有的系統函式所花費的時間複雜度為O(n),epoll則耗時O(1)[2])。epollFreeBSDkqueue類似,底層都是由可組態的作業系統核心物件建構而成,並以檔案描述符(file descriptor)的形式呈現於使用者空間

程式介面[编辑]

int epoll_create(int size);

建立epoll物件並回傳其描述子。

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

將要交由核心管控的檔案描述子加入epoll物件並設定觸發條件。

int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);

等待已註冊之事件被觸發或計時終了。

觸發模式[编辑]

epoll提供edge-triggered及level-triggered模式。在edge-trigger模式中,epoll_wait僅會在新的事件首次被加入epoll 物件時返回;於level-triggered模式下,epoll_wait在事件狀態未變更前將不斷被觸發。

舉例來說,倘若有一個已經於epoll註冊之管線接獲資料,epoll_wait將返回,並發出資料讀取的信號。現假設緩衝區的資料僅有部份被讀取並處理,在level-triggered模式下,任何對epoll_wait之呼叫都將即刻返回,直到緩衝區中的資料全部被讀取;然而,在edge-triggered的情境下,epoll_wait僅會於再次接收到新資料(亦即,新資料被寫入管線)時返回。

相關條目[编辑]

參考資料[编辑]

epoll patch

外部連結[编辑]