鍍金池/ 問答/Linux  網(wǎng)絡安全/ 多進程epoll調(diào)度問題

多進程epoll調(diào)度問題

在linux內(nèi)核大于 3.9 的網(wǎng)絡編程中,為了避免驚群,可以使用 OS_REUSEPORT。
這樣使得多個進程可以監(jiān)聽同一個端口(參見nginx 1.9.1)

在多個子進程使用epoll創(chuàng)建對socket監(jiān)聽后,當有事件產(chǎn)生,操作系統(tǒng)會選擇一個進程響應。假如只有一個進程,且進程正在進行處理,這個時候若有事件發(fā)生,這個進程會不會被打斷?假如所有進程都在運行,新的事件是等待某個進程執(zhí)行完以后,分配給它,還是直接先綁定到某個進程上?

對操作系統(tǒng)了解很少,希望得到一些幫助,謝謝大家。

回答
編輯回答
裸橙

假如只有一個進程,且進程正在進行處理,這個時候若有事件發(fā)生,這個進程會不會被打斷

不會。epoll是需要進程自己調(diào)用epoll_wait去阻塞等待事件發(fā)生的,如果進程在進行處理時有新事件發(fā)生了,要等下一次調(diào)用epoll_wait時進程才能知道。

2017年1月19日 19:06
編輯回答
毀憶

假如所有進程都在運行,新的事件是等待某個進程執(zhí)行完以后,分配給它,還是直接先綁定到某個進程上?

由內(nèi)核調(diào)度直接分配,這個進程會收到一個連接事件。
可以看看這個server端簡單的代碼https://github.com/WinterChen/reuseport_example/blob/master/udp_reuseport_server.cc

2018年2月17日 03:19