SO REUSEPORT EPOLLEXCLUSIVE都用來解決epoll的驚群,側重點跟區別是什麼

時間 2021-05-14 14:39:34

1樓:plantegg

EPOLLEXCLUSIVE 和 SO_REUSEPORT 都是在核心層面將連線分到多個worker,解決了epoll下的驚群,SO_REUSEPORT 會更均衡一些,EPOLLEXCLUSIVE在壓力不大的時候會導致連線總是在少數幾個worker上(如下case)。但是 SO_REUSEPORT在最壞的情況下會導致乙個worker即使Hang了,OS也依然會派連線過去(後面有Case),這是非常致命的,所以4.5核心引入了 EPOLLEXCLUSIVE(總是給閒置等待佇列的第乙個worker派連線)

相對 SO_REUSEPORT導致的stuck, EPOLLEXCLUSIV 還是更好接受一些。

SO_REUSEPORT問題,如下圖,即使第二個worker卡住了,核心還是繼續派連線過來:

EPOLLEXCLUSIVE帶來的小問題,明顯有些worker更忙,但是只是在小壓力小出現(因為LIFO):

2樓:

說一些自己知道的,不一定對。

SO_REUSEPORT 和 EPOLLEXCLUSIVE 都可以用來 scale out listening socket;前者不依賴 epoll,而且如果某個fd被關了,accept queue裡的請求會被丟棄。

另外這兩個都不能用來讓多個執行緒/程序去操作同乙個 connection socket 做scale out,原因就是

上面陳碩先生說的會存在 short read / short write 的情況。

一些更具體的細節可以參考:

多說個題外話,Windows 的 IOCP 支援多個執行緒對同乙個 port 操作,但是考慮到 IOCP 是支援 disk IO 的,所以這麼設計無可厚非;而如果對關聯 tcp socket 的 port 也這麼做,那麼還是得處理 short read / short write 的情況,這一下又把問題搞複雜了。

最後借個場地斗膽想問一下 @陳碩 先生對上面那篇 post 有什麼看法,包括 part 2 提到的epoll 的設計問題。

學 Python 都用來幹嘛的?

ggggg 可以用來彈琴 詳情請移步 在遊戲 原神 裡演奏歌曲是什麼體驗?ggggg的回答 知乎 https www. 程式設計學苑 python之所以這麼火就是因為他的膠水特性,能做的事情太多了,可以做web開發,做遊戲,做資料分析以及人工智慧等方面,想諮詢更多相關資訊,可以諮詢老男孩教育官網做p...

王熙鳳犯法所得的錢都用來做什麼了?

簡要回答一下,先占個坑 1 存私房錢 2 被賈璉 偷 走花了 3 補貼娘家兄弟 4 後期補貼賈府 5 各種不應該她出的開銷 和長輩們打牌時為了討好刻意輸的錢 開詩社時 送 給小姐寶玉們玩的錢 邢夫人差人問她要錢要東西 平時賈府內做人情花出去的,例如鶯兒賈環那次給賈環 寶玉要喝荷葉湯那次的食材等等。P...

Shell 是用來解決什麼問題的?

窗戶 一種方便的指令碼語言,用於將具體程式作為零件,利用各種重定向 包括管道 以及結構化程式設計裡的東西拼接在一起,以完成你的複雜任務,awk sed作為字元處理的經典在裡面比較常用,經常伴隨管道一起。可以說不寫一手shell很難說精通unix linux。值得擁有。 解決使用者如何使用計算機的問題...