epoll模型與select模型的區別(宿管大媽的例子)

Nginx  --->epoll模型

Apache --->select模型

處理大量連接的讀寫時,Apache所採用的select網絡I/O模型比較低,用兩個通俗的比喻來解釋二者的區別:


  • 第一個比喻:

    例如你在大學讀書,住的宿舍樓有很多房間,你的朋友要來找你,select版宿管大媽就會

帶着你的朋友到各個房間挨個去找,直到找到爲止。而epoll版宿管大媽會先記下每位入住同學的房間號碼,當你朋友來找你時,只需告訴你的朋友你住在哪個房間?不用親自帶着你的朋友滿宿舍的找。如果同時來了100個人,都要找自己住這棟樓的同學,select版宿管大媽和epoll版宿管大媽說的效率高,就很明顯了。

  • 第二個比喻:

    select調用複雜度是線性的,即O(n)。舉個例子,一個保姆照看一羣孩子,如果把孩子是否需要尿尿比作網絡I/O事件,select的作用就好比這個保姆挨個詢問每個孩子“你要尿尿嗎?”,如果孩子的回答是,保姆則把孩子領出來放到另外一個地方。當所有孩子詢問完之後,保姆領着這些需要尿尿的孩子去上廁所(處理網絡I/O事件)。而epoll機制下,保姆不再需要挨個詢問每個孩子,取而代之的是,約定好的地方是否有孩子。如果有,則領着孩子去上(處理網絡I/O事件),因此,這種機制能夠高效的處理成千上萬的併發連接,而且性能不會隨着連接數增加而下降太多。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章