里程焦慮的慢速通道:水貨笨叔講解QSpinLock原始碼:

rlk8888發表於2022-03-21

QSpinlock申請鎖的過程,可以分成快速通道,中速通道,和慢速通道總結一下。

  1. 快速通道:有點類似我們現在熱門的電車,大家去充電樁充電,如果這個充電樁沒有人使用,那你就可以用了,這是快速通道。




  2. 中速通道:如果我們去充電時候,發現這個充電樁已經有人在使用,但是沒有人在排隊等待,那麼你就是第一個等待的人,相當於拿到了VIP金牌,這個人充滿了之後,就輪到你了。




  3. 慢速通道:如果有人在充電,而且已經有人在排隊了。你一看,媽呀,剩餘的路程數不多了,離下一個充電站還有好幾百公里,那你只能老老實實排隊,這就是 里程焦慮,慢速通道。





QSpinLock有啥優點,笨叔覺得有下面幾個:

1. 整合MCS演算法到自旋鎖中,繼承了MCS演算法的所有優點,有效解決了CPU快取記憶體行顛簸問題。

2. 沒有增加spinlock資料結構的大小,把val細分成多個域,完美實現了MCS演算法

3. 當只有兩個CPU試圖獲取自旋鎖時,使用pending域就可以完美解決問題,第2個CPU只需要設定pending域,然後自旋等待鎖釋放。當有第3個或者更多CPU來爭用時,則需要使用額外的MCS節點。第3個CPU會自旋等待鎖被釋放,即pending域和locked域被清零,而第4個CPU和後面的CPU只能在MCS節點中自旋等待locked域被置1,直到前繼節點把locked控制器過繼給自己才能有機會自旋等待自旋鎖的釋放,從而完美解決激烈鎖爭用帶來的快取記憶體行顛簸問題。



所以,從經典自旋鎖到基於排隊的自旋鎖,再到現在的排隊自旋鎖,可以看到社群專家們對效能優化孜孜不倦的追求。也許,在不久將來,qspinlock的實現還會有比較大的變化。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70005277/viewspace-2878933/,如需轉載,請註明出處,否則將追究法律責任。

相關文章