驚群現象
master進程首先通過 socket() 來創建一個socket文件描述符用來監聽,然后fork生成子進程(workers 進程),那么當連接進來時,所有子進程都將收到master進程的 通知並“爭着”與它建立連接,這就叫“驚群現象”。大量的進程被激活又掛起,只有一個進程可以accept() 到這個連接,這當然會消耗系統資源
nginx對驚群現象的處理accept_mutex(加鎖)
nginx 提供了一個 accept_mutex 這個東西,即每個 worker 進程在執行accept之前都需要先獲取鎖,獲取不到就放棄執行accept()。有了這把鎖之后,同一時刻,就只會 有一個進程去accpet(),這樣就不會有驚群問題了