里程焦慮的慢速通道:水貨笨叔講解QSpinLock原始碼:
QSpinlock申請鎖的過程,可以分成快速通道,中速通道,和慢速通道總結一下。
-
快速通道:有點類似我們現在熱門的電車,大家去充電樁充電,如果這個充電樁沒有人使用,那你就可以用了,這是快速通道。
-
中速通道:如果我們去充電時候,發現這個充電樁已經有人在使用,但是沒有人在排隊等待,那麼你就是第一個等待的人,相當於拿到了VIP金牌,這個人充滿了之後,就輪到你了。
-
慢速通道:如果有人在充電,而且已經有人在排隊了。你一看,媽呀,剩餘的路程數不多了,離下一個充電站還有好幾百公里,那你只能老老實實排隊,這就是 里程焦慮,慢速通道。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 焦慮
- 宋寶華:論程式設計師的時代焦慮與焦慮的緩解程式設計師
- Gson的原始碼講解原始碼
- 機器學習的數學焦慮機器學習
- 程式設計師的焦慮程式設計師
- 從.NET看微軟的焦慮微軟
- YYKit原始碼講解(4)原始碼
- JUC 原始碼講解:sleep()原始碼
- 一個老程式猿的焦慮
- 遊戲人請不要焦慮遊戲
- 遊戲直播下半場的焦慮症遊戲
- 一個老程式猿的焦慮3
- 我是如何實現零焦慮的
- 一個老程式猿的焦慮2
- 程式設計師,停止你的焦慮程式設計師
- Groovy核心類原始碼講解(上)原始碼
- Redis原始碼系列之rename講解Redis原始碼
- JUC原始碼講解:逐步解析 join()原始碼
- JUC原始碼講解:逐步解析 Thread.init() 原始碼原始碼thread
- 談談程式設計師的焦慮感程式設計師
- 對於技術焦慮的一點想法
- [譯]新手開發如何克服焦慮?
- 程式設計師,你焦慮嗎?程式設計師
- 程式設計師如何克服焦慮?程式設計師
- 解放“身材焦慮“、實現“大碼自由“,大碼女裝迎來春天?
- 難解的AIoT焦慮,華為是否在準備一劑特效藥存在?AI特效
- 《自然·通訊》:焦慮的大腦功能亂竄
- 智慧網聯汽車求解安全焦慮SMK
- 中年程式設計師該焦慮嗎?程式設計師
- 加碼“狗臉識別”背後,曠視的AI商業化焦慮AI
- JWT身份認證(附帶原始碼講解)JWT原始碼
- 位元組押寶元宇宙,能緩解遊戲焦慮症嗎?元宇宙遊戲
- 在知識分享的時代,你焦慮個毛啊
- 【萬字箴言】技術焦慮的減法與解法箴言
- 職場達人關於工作焦慮的11點心得
- 較少焦慮感的要義:地圖、位置、方向地圖
- 叔
- 《自然》:破解女性更易腹痛和焦慮之迷!