1. 程式人生 > >關於悲觀鎖和樂觀鎖的區別(最直觀理解)

關於悲觀鎖和樂觀鎖的區別(最直觀理解)

悲觀鎖(Pessimistic Lock):

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

期間需要訪問該資料的都會等待。

樂觀鎖(Optimistic Lock):

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

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