epoll裡面mmap釋疑

2021-09-07 08:32:53 字數 313 閱讀 4093

今天看到有文章說epoll裡面用了mmap,還說程序不需要從核心讀資料,只需要從使用者態buffer讀資料就可以。覺得很神奇,就查了一下,發現完全不是描述的那樣。實際上,只是把要傳遞的fd通過mmap來傳遞的,而需要讀fd裡面的資料的話,還是要程式通過read fd來讀的。如下:

這點實際上涉及到epoll的具體實現了。無論是select,poll還是epoll都需要核心把

fd訊息通知給使用者空間,如何避免不必要的記憶體拷貝就很重要,在這點上,epoll是通過核心於使用者空間mmap同一塊記憶體實現的。而如果你想我一樣從2.5核心就關注epoll的話,一定不會忘記手工mmap這一步的。

epoll裡面mmap釋疑

今天看到有文章說epoll裡面用了mmap,還說程序不需要從核心讀資料,只需要從使用者態buffer讀資料就可以。覺得很神奇,就查了一下,發現完全不是描述的那樣。實際上,只是把要傳遞的fd通過mmap來傳遞的,而需要讀fd裡面的資料的話,還是要程式通過read fd來讀的。如下 這點實際上涉及到ep...

epoll之二 epoll實戰

int epoll create int size epoll create返回 乙個控制代碼,之後epoll的 使用都將依靠這個 控制代碼 來 標識,引數 size是告訴epoll所要處理的大致事件數目,不再使用epoll時,必須呼叫close 關閉這個控制代碼。size這個引數只是 告訴核心這個...

epoll邊緣觸發 Epoll筆記

下圖為epoll的流程圖 epoll一共兩種模式,水平觸發 lt 和邊緣觸發 et 主要的區別在於對讀,寫資料的處理 lt初始化 epoll ctrl connect socket,epollin,add lt讀 void lt handle read if n 0 errno eagain lt寫...