天天看點

關于悲觀鎖和樂觀鎖的差別(最直覺了解)

悲觀鎖(pessimistic lock):

每次拿資料的時候都會擔心會被别人修改(疑心重很悲觀),是以每次在拿資料的時候都會上鎖。確定自己使用的過程中不會被别人通路,自己使用完後再解鎖。

期間需要通路該資料的都會等待。

樂觀鎖(optimistic lock):

每次拿資料的時候都完全不擔心會被别人修改(心态好很樂觀),是以每次在拿資料的時候都不會上鎖。但是在更新資料的時候去判斷該期間是否被别人修改過(使用版本号等機制),期間該資料可以随便被其他人讀取。

兩種鎖各有優缺點,不能單純的定義哪個好于哪個。樂觀鎖比較适合資料修改比較少,讀取比較頻繁的場景,即使出現了少量的沖突,這樣也省去了大量的鎖的開銷,故而提高了系統的吞吐量。但是如果經常發生沖突(寫資料比較多的情況下),上層應用不不斷的retry,這樣反而降低了性能,對于這種情況使用悲觀鎖就更合适。