9.惊群现象
什么是驚群現象?
舉一個很簡單的例子,當你往一群鴿子中間扔一塊食物,雖然最終只有一個鴿子搶到食物,但所有鴿子都會被驚動來爭奪,沒有搶到食物的鴿子只好回去繼續睡覺, 等待下一塊食物到來。這樣,每扔一塊食物,都會驚動所有的鴿子,即為驚群。對于操作系統來說,多個進程/線程在等待同一資源時,也會產生類似的效果,其結果就是每當資源可用,所有的進程/線程都來競爭資源,造成的后果:
1)系統對用戶進程/線程頻繁的做無效的調度、上下文切換,系統系能大打折扣。
2)為了確保只有一個線程得到資源,用戶必須對資源操作進行加鎖保護,進一步加大了系統開銷。
最常見的例子就是對于socket描述符的accept操作,當多個用戶進程/線程監聽在同一個端口上時,由于實際只可能accept一次,因此就會產生驚群現象,當然前面已經說過了,這個問題是一個古老的問題,但目前的內核版本已經修復了這個問題,一個鏈接過來,內核只會喚醒一個子進程出來accept,這樣就不用擔心驚群效應了。
參考:https://blog.csdn.net/tuantuanls/article/details/41205739
總結
- 上一篇: 8.程序什么时候应该使用线程,什么时候单
- 下一篇: 10.线程池与连接池