1. 程式人生 > >樂觀鎖與悲觀鎖的簡單區分

樂觀鎖與悲觀鎖的簡單區分

個數 行數 但是 分布式系 修改 讀寫 使用場景 狀態 控制

1、鎖的出現,是因為並發讀寫同一個數據的時候,需要進行數據完備性的保護,避免臟讀、臟寫等。

2、樂觀鎖,需要在事務中加鎖,在讀取數據的時候,不必在意數據是否已經被修改了(即允許臟讀);但是在寫入數據的時候,要檢查數據是否已經被修改了(可以通過版本號等機制控制),如果被修改那麽就通知事務調用者,事務失敗了。

3、悲觀鎖,需要在事務中加鎖,在讀取寫入數據的時候,都需要考慮數據是否已經被修改,如果被修改了,那麽就通知事務調用者,事務被阻塞了,進入等待狀態。

4、從性能上看,樂觀鎖性能會高一些,因為悲觀鎖要檢查更多的數據變動情況,而且還會存在阻塞。

5、從使用場景上看,悲觀鎖一般用於要求很強的數據一致性的系統,讀寫都不允許“臟”,樂觀鎖一般用於一致性稍弱的系統,不允許臟寫,但是允許臟讀。

概念引申:數據庫的各種鎖,分布式系統的CAP原則。

樂觀鎖與悲觀鎖的簡單區分