redis中io復用之kqueue

2021-08-16 19:26:14 字數 787 閱讀 4699

前面講過evport/epoll的實現,下來我們繼續看看我們kqueue在redis中的使用

1:首先通過kqueue申請提供給系統監控的fd

typedef struct aeapistate aeapistate;

static int aeapicreate(aeeventloop *eventloop)

#通過kqueue申請提供給系統監控的fd

state->kqfd = kqueue();

if (state->kqfd == -1)

eventloop->apidata = state;

return 0;

}2:通過kevent 新增要監控的事件包括讀和寫事件

static int aeapiaddevent(aeeventloop *eventloop, int fd, int mask)

#根據mask判斷是寫事件,然後通過kevent 設定到kernel space中

if (mask & ae_writable)

#注意這裡是if的關係,可以同時監控讀和寫事件

return 0;

}3:通過kevent 開監控fd

static int aeapipoll(aeeventloop *eventloop, struct timeval *tvp) else

#非timeout則retval 返回值大於零

if (retval > 0)

}return numevents;

}

redis中io復用之select

前面講過evport epoll kqueue的實現,下來我們繼續看看我們select在redis中的使用 1 首先通過fd zero來清空用於監控讀和寫fd的rfds和wfds的鍊錶 typedef struct aeapistate aeapistate static int aeapicrea...

I O 復用之 poll 函式

poll 函式提供的功能與 select 類似,不過在處理流裝置時,它能提供額外的資訊。include int poll struct pollfd fdarray,unsigned long nfds,int timeout 返回值 若有就緒描述符則為其數目,若超時則為 0,若出錯則為 1 str...

I O多路復用之poll

poll的優點 1 poll 不要求開發者計算最大檔案描述符加一的大小。2 poll 在應付大數目的檔案描述符的時候速度更快,相比於select。3 它沒有最大連線數的限制,原因是它是基於鍊錶來儲存的。poll的缺點 1 大量的fd的陣列被整體複製於使用者態和核心位址空間之間,而不管這樣的複製是不是...