epoll 事件丟失

如果主accept監聽的soctet
fd也設置爲非阻塞,那麼單純靠epoll事件來驅動的服務器模型會存在問題,併發壓力下發現,每次accept只從系統中取得第一個,所以如果恰馮多個
連接同時觸發server
fd的EPOLLIN事件,在返回的event數組中體現不出來,會出現丟失事件的現象,所以當用ab等工具簡單的壓載就會發現每次都會有最後幾條信息得
不到處理,原因就在於此,我現在的解決辦法是將server fd的監聽去掉,用一個線程阻塞監聽,accept成功就處理檢測client

fd,然後在主線程循環監聽client事件,這樣epoll在邊緣模式下出錯的概率就小,測試表明效果明顯


以上爲網上的資料

//本人:1可以將fd設置爲阻塞,並採用LT模式,就可以了

2.可以在Accept時用循環接受鏈接



發佈了15 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章