epoll里面mmap釋疑


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

 

 這點實際上涉及到epoll的具體實現了。無論是select,poll還是epoll都需要內核把FD消息通知給用戶空間,如何避免不必要的內存拷貝就很重要,在這點上,epoll是通過內核於用戶空間mmap同一塊內存實現的。而如果你想我一樣從2.5內核就關注epoll的話,一定不會忘記手工 mmap這一步的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM