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