專業術語:緩存
比較並交換(Compare And Swap): CAS操做須要兩個數值,一箇舊值(指望值),一個新值,在操做期間,先比較舊值有沒有發生變化,若是舊值沒有發生變化,則將新值與舊值進行替換jvm
緩存行(Cache Line):話黁的最小操做單位ide
CPU流水線(CPU pipeline):CPU流水線的操做方式就像工業生產上的裝配流水線,在CPU中由五到六個不一樣功能的電路單元組成一條指令處理流水線,而後將一條X86指令分紅5~6步再由這些指令單元分別執行,這樣就能實現一個CPU時鐘週期完成一條指令,所以提升cpu的執行速率對象
內存順序衝突(Memory order violation):內存順序衝突通常是由假共享引發的,假共享是指多個CPU同時修改同一個緩存行的不一樣部分而引發其中一個cpu的操做無效,當出現這個內存順序衝突時,cpu必須清空流水線blog
總線鎖保證原子性ip
使用處理器提供的一個LOCK指令信號,當一個處理器在總線上輸出此信號時,其餘處理器的請求將被阻塞,那麼該處理器就能夠獨佔共享區內存
使用緩存鎖保證原子性:資源
內存區域若是被緩存在處理器的緩存行中,而且在lock操做期間被鎖定,那麼當他執行鎖操做回寫到內存時,處理器不在總線上聲言lock信號,而是修改內部的內存地址,並容許他的緩存一致性機制來保證操做的原子性,由於緩存一致性機會會阻止同時修改兩個以上處理器緩存的內存區域數據,當其餘處理器回寫已被鎖定的緩存行數據時,會使緩存行無效it
有兩種狀況不會觸發緩存鎖的:pip
1)、操做數不能被緩存在處理器內部或操做數跨多個緩存行,處理器會調用總線鎖定
2)、處理器不支持緩存鎖定(intel 486,pentium處理器)
CAS操做的三大問題:
1、ABA問題
2、循環時間長,開銷大:當CAS長時間不成功時,會給cpu帶來很是大的開銷,致使cpu使用率飆高,若是jvm支持處理器提供的pause指令,那麼執行效率會有必定的提高。pause指令有兩個做用,(一)、延遲流水線的執行指令(de-pipeline),使cpu不會消耗太多的執行資源,延遲的時間取決於具體的實現版本,有的版本延遲爲0.(二)、能夠避免在退出循環的時候因內存順序衝突而引發的cpu流水線清空,從而提升執行效率。
3、只能保證一個共享變量的原子性:能夠把多個變量放在同一個對象裏