Sunday, February 20, 2022

[Linux Kernel] Linux IO模式及 select、poll、epoll 详解

select,poll,epoll本質上都是同步I/O,因爲他們都需要在讀寫事件就緒後自己負責進行讀寫,也就是說這個讀寫過程是阻塞的

select

本质上是通过设置或检查存放fd标志位的数据结构进行下一步处理

select 的缺點

1. 需要維護一個用來存放大量fd的數據結構,這樣會使得用戶空間和內核空間在傳遞該結構時複製開銷大

2. 對socket進行掃描時是線性掃描,即採用輪詢的方法,效率較低

3. select 支持的文件描述符數量太小了,32位機默認是1024個。64位機默認是2048.

poll

poll 的缺點:

1. 大量的fd的數組被整體複製於用戶態和內核地址空間之間,而不管這樣的複製是不是有意義

2. 如果報告了fd後,沒有被處理,那麼下次poll時會再次報告該fd

epoll

1. epoll支持水平觸發和邊緣觸發,最大的特點在於邊緣觸發,並且只會通知一次。

2. 還有一個特點是,epoll使用“事件”的就緒通知方式,通過epoll_ctl註冊fd,一旦該fd就緒,內核就會採用類似callback的回調機制來激活該 fd,epoll_wait 便可以收到通知

沒有最大併發連接的限制,能打開的FD的上限遠大於1024(1G的內存上能監聽約10萬個端口

內存拷貝,利用mmap()文件映射內存加速與內核空間的消息傳遞;即epoll使用mmap減少複製開銷

參考資料:

IO多路复用之select总结

IO多路复用之epoll总结

IO多路复用之poll总结


No comments:

Post a Comment

n8n index

 【n8n免費本地端部署】Windows版|程式安裝x指令大補帖  【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能