如何理解 Epoll select 和 poll 三種模型,能否用生活中的例子做比喻?


簡單舉個例子(可能也不是很形象)

select/poll

飯店服務員(內核)告訴飯店老闆(用戶程序):」現在有客人結賬「

但是這個服務員沒人明確告訴老闆,哪幾桌的客人結帳。老闆得自兒一個一個桌子去問:請問是你要結帳?

epoll

飯店服務員(內核)告訴飯店老闆(用戶程序):」1,2,5號客人結賬「

老闆就可以直接去1,2,5號桌收錢了


借用 @藍形參 快遞的例子吧。

比如說你從某寶下單買了幾個東西,這幾個東西分別由N個快遞員分別給你送過來。在某一時刻,你開始等快遞。

對於select/poll,就是你在睡覺的時候,收到一條簡訊「你有快遞到了,取一下」,但不知道發送方是誰(但一定是那N個快遞員中的某人/某幾個人給你發的),所以你必須挨個給那N個快遞員分別打個電話,問他們,是不是我的快遞已經到了。

至於select/poll的區別,類似於你和快遞員都分別有兩個手機號,一個移動,一個聯通,其區別就在於你用哪個手機號給他們打的問題。

對於epoll,是你收到那條簡訊的時候,看到了發送方的電話號碼,你就可以直接給他打電話,問他在哪兒,你好去去快遞。


細談Select,Poll,Epoll


推薦閱讀:

linux 我有2個c程序 a,b 是否可以通過獲得a的物理地址之後,在b中調用a的函數?
在Windows上安裝Oracle VM VirtualBox Linux系統,共享目錄的原理是什麼?
Linux文件系統中/bin、/sbin、/usr/bin、/usr/sbin、/usr/local/bin、/usr/local/sbin文件夾的區別是什麼?
怎麼搭建學習Linux內核的運行、調試環境?
在現代的Unix操作系統上執行sudo rm -rf /會發生什麼?

TAG:程序員 | Linux | epoll | NIO |