悲觀鎖(Pessimistic Lock), 顧名思義医男,就是很悲觀忌傻,每次去拿數(shù)據(jù)的時候都認為別人會修改,所以每次在拿數(shù)據(jù)的時候都會上鎖吩愧,這樣別人想拿這個數(shù)據(jù)就會block直到它拿到鎖蹬碧。傳統(tǒng)的關系型數(shù)據(jù)庫里邊就用到了很多這種鎖機制衷模,比如行鎖低匙,表鎖等漫拭,讀鎖改览,寫鎖等下翎,都是在做操作之前先上鎖。
樂觀鎖(Optimistic Lock), 顧名思義宝当,就是很樂觀视事,每次去拿數(shù)據(jù)的時候都認為別人不會修改,所以不會上鎖庆揩,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數(shù)據(jù)俐东,可以使用版本號等機制。樂觀鎖適用于多讀的應用類型订晌,這樣可以提高吞吐量虏辫,像數(shù)據(jù)庫如果提供類似于write_condition機制的其實都是提供的樂觀鎖。
兩種鎖各有優(yōu)缺點锈拨,不可認為一種好于另一種砌庄,像樂觀鎖適用于寫比較少的情況下,即沖突真的很少發(fā)生的時候奕枢,這樣可以省去了鎖的開銷娄昆,加大了系統(tǒng)的整個吞吐量。但如果經常產生沖突缝彬,上層應用會不斷的進行retry萌焰,這樣反倒是降低了性能,所以這種情況下用悲觀鎖就比較合適谷浅。