你寫的關(guān)于epoll驚群的問題有些不妥
1. Linux 4.9之后已經(jīng)部分修復(fù)了epoll的驚群問題,在epoll_ctl時候同時設(shè)置EXCLUSIVE標(biāo)志谚鄙,內(nèi)核就會在事件發(fā)生的時候只喚醒一個進(jìn)程或線程各拷,如果設(shè)置ET模式,這時候是不會存在驚群問題的闷营。
2.之所以說Linux4.9部分解決這個問題烤黍,是因為LT模式導(dǎo)致的,因為在LT模式下傻盟,如果有時間發(fā)生速蕊,內(nèi)核會喚醒進(jìn)程去處理,然而如果這個處理進(jìn)程并沒有立即處理這個事件娘赴,那么內(nèi)核會喚起其他進(jìn)程處理這個事件规哲,這時候就導(dǎo)致了驚群。原因是因為LT模式下內(nèi)核不會立即將事件從rdlist中取出诽表,而是在其處理完之后再移除rdlist唉锌。
你的代碼如果要發(fā)生驚群的話應(yīng)該把sleep(2)打開,然后用默認(rèn)的LT模式竿奏。
關(guān)于linux中select和epoll是否存在驚群效應(yīng)的爭執(zhí)親測糊秆,先給出結(jié)論:select不存在驚群效應(yīng),每次來一個socket消息议双,只有一個消費進(jìn)程被喚醒。e_poll存在驚群效應(yīng)捉片,每次來一個socket連接請求平痰,處于空閑狀態(tài)的消費...