漫畫:什麼是 CAS 機制?,漫畫cas機制

來源:互聯網
上載者:User

漫畫:什麼是 CAS 機制?,漫畫cas機制


點擊上方“程式員小灰”,選擇“置頂公眾號”

有趣有內涵的文章第一時間送達!







—————  第二天  —————




















————————————











樣本程式:啟動兩個線程,每個線程中讓靜態變數count迴圈累加100次。




最終輸出的count結果是什麼呢?一定會是200嗎?









加了同步鎖之後,count自增的操作變成了原子性操作,所以最終的輸出一定是count=200,代碼實現了安全執行緒。





為什麼這麼說呢?關鍵在於效能問題。


Synchronized關鍵字會讓沒有得到鎖資源的線程進入BLOCKED狀態,而後在爭奪到鎖資源後恢複為RUNNABLE狀態,這個過程中涉及到作業系統使用者模式核心模式的轉換,代價比較高。


儘管Java1.6為Synchronized做了最佳化,增加了從偏向鎖輕量級鎖再到重量級鎖的過度,但是在最終轉變為重量級鎖之後,效能仍然較低。







所謂原子操作類,指的是java.util.concurrent.atomic包下,一系列以Atomic開頭的封裝類。例如AtomicBooleanAtomicIntegerAtomicLong。它們分別用於Boolean,Integer,Long類型的原子性操作。


現在我們嘗試在代碼中引入AtomicInteger類:




使用AtomicInteger之後,最終的輸出結果同樣可以保證是200。並且在某些情況下,代碼的效能會比Synchronized更好。







什麼是CAS?


CAS是英文單詞Compare And Swap的縮寫,翻譯過來就是比較並替換。


CAS機制當中使用了3個基本運算元:記憶體位址V,舊的預期值A,要修改的新值B。


更新一個變數的時候,只有當變數的預期值A和記憶體位址V當中的實際值相同時,才會將記憶體位址V對應的值修改為B。


這樣說或許有些抽象,我們來看一個例子:



1.在記憶體位址V當中,儲存著值為10的變數。





2.此時線程1想要把變數的值增加1。對線程1來說,舊的預期值A=10,要修改的新值B=11。





3.線上程1要提交更新之前,另一個線程2搶先一步,把記憶體位址V中的變數值率先更新成了11。





4.線程1開始提交更新,首先進行A和地址V的實際值比較(Compare),發現A不等於V的實際值,提交失敗。





5.線程1重新擷取記憶體位址V的當前值,並重新計算想要修改的新值。此時對線程1來說,A=11,B=12。這個重新嘗試的過程被稱為自旋




6.這一次比較幸運,沒有其他線程改變地址V的值。線程1進行Compare,發現A和地址V的實際值是相等的。





7.線程1進行SWAP,把地址V的值替換為B,也就是12。




從思想上來說,Synchronized屬於悲觀鎖,悲觀地認為程式中的並發情況嚴重,所以嚴防死守。CAS屬於樂觀鎖,樂觀地認為程式中的並發情況不那麼嚴重,所以讓線程不斷去嘗試更新。

















CAS的缺點:


1.CPU開銷較大

在並發量比較高的情況下,如果許多線程反覆嘗試更新某一個變數,卻又一直更新不成功,迴圈往複,會給CPU帶來很大的壓力。


2.不能保證代碼塊的原子性

CAS機制所保證的只是一個變數的原子性操作,而不能保證整個代碼塊的原子性。比如需要保證3個變數共同進行原子性的更新,就不得不使用Synchronized了。


3.ABA問題

這是CAS機制最大的問題所在。

什麼是ABA問題?怎麼解決?我們下一期來詳細介紹。




幾點補充:


本漫畫純屬娛樂,還請大家盡量珍惜當下的工作,切勿模仿小灰的行為哦。




—————END—————




喜歡本文的朋友們,歡迎長按關注訂閱號程式員小灰,收看更多精彩內容



   
4
0
查看評論

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.