epoll 介面以及原理說明

2021-10-03 03:28:49 字數 768 閱讀 7635

int epoll_create(int size);
建立 epoll 物件,建立一顆空的紅黑樹,乙個空雙向鍊錶。

int epoll_ctl(int epid, int op, int sockid, struct epoll_event *event);
向 epoll 物件裡面的紅黑樹中增加、刪除、修改指定的節點。

int epoll_wait(int epid, struct epoll_event *events, int maxevents, int timeout);
等待雙向鍊錶中是否有節點,若有節點則取得不大於 maxevents 數量的節點並放入 events 中,最後返回。

int epoll_event_callback(struct eventpoll *ep, int sockid, uint32_t event)
有顯示卡驅動呼叫,判斷當前事件(建立連線、斷開連線、讀寫資料)對應的 socket 是否已經在紅黑樹中**,如果是,則將新的事件儲存到對應的紅黑樹節點中並更新到雙向鍊錶中。 

1、上文在說明函式功能時提到了兩個 epoll 核心結構:紅黑樹 和 雙向鍊錶 。

2、eventpoll 和 紅黑樹、雙向鍊錶的關係圖如下所示:

epoll原理剖析

首先我們來定義流的概念,乙個流可以是檔案,socket,pipe等等可以進行i o操作的核心物件。不管是檔案,還是套接字,還是管道,我們都可以把他們看作流。之後我們來討論i o的操作,通過read,我們可以從流中讀入資料 通過write,我們可以往流寫入資料。現在假定乙個情形,我們需要從流中讀資料,...

epoll使用例項說明

之前一直在講如何epoll如何好用,但是並沒有例項來演示epoll的使用,下面我們就看乙個伺服器端使用epoll監聽大量併發鏈結的例子。首先看一下epoll的幾個函式的介紹。1 epoll create函式 intepoll create intsize 2 epoll ctl函式 brief 該函...

epoll簡單說明

首先我們來定義流的概念,乙個流可以是檔案,socket,pipe等等可以進行i o操作的核心物件。不管是檔案,還是套接字,還是管道,我們都可以把他們看作流。之後我們來討論i o的操作,通過read,我們可以從流中讀入資料 通過write,我們可以往流寫入資料。現在假定乙個情形,我們需要從流中讀資料,...