SVN中悲觀鎖和樂觀鎖的區別

2021-08-13 03:05:02 字數 568 閱讀 2654

悲觀鎖(pessimistic lock):

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

期間需要訪問該資料的都會等待。即除了鎖的擁有者,其他人只能讀取該檔案資訊,並不可以修改該檔案。如果需要修改該檔案,必須等鎖的擁有者釋放鎖。

樂觀鎖(optimistic lock):

每次拿資料的時候都完全不擔心會被別人修改(心態好很樂觀),所以每次在拿資料的時候都不會上鎖。但是在更新資料的時候去判斷該期間是否被別人修改過(使用版本號等機制),期間該資料可以隨便被其他人讀取。即除了鎖的擁有者,其他人都可以讀取和修改目標檔案的資訊,但是除了鎖的擁有者其他人都不可以提交更改後的內容到倉庫,除非鎖的擁有者已經釋放了樂觀鎖。並且在提交過後會判斷期間是否被別人修改過。

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

悲觀鎖和樂觀鎖的區別

悲觀鎖 pessimistic lock 每次獲取資料的時候,都會擔心資料被修改,所以每次獲取資料的時候都會進行加鎖,確保在自己使用的過程中資料不會被別人修改,使用完成後進行資料解鎖。由於資料進行加鎖,期間對該資料進行讀寫的其他執行緒都會進行等待。樂觀鎖 optimistic lock 每次獲取資料...

悲觀鎖和樂觀鎖

1.悲觀鎖,正如其名,它指的是對資料被外界 包括本系統當前的其他事務,以及來自外部系統的事務處理 修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定狀態。悲觀鎖的實現,往往依靠資料庫提供的鎖機制 也只有資料庫層提供的鎖機制才能真正保證資料訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無...

悲觀鎖和樂觀鎖

前幾天有人問了我乙個問題,說如果資料庫某些操作不用事務,那麼又需要保持資料的一致性,那麼該用什麼方法替代事務。我就想到了悲觀鎖和樂觀鎖的思想,下面我解釋一下在資料庫中的悲觀鎖和樂觀鎖 1.悲觀鎖就是把資料庫的一些操作,放在事務當中,依賴資料庫的隔離級別,實現對資料修改的封鎖,這樣做資料一致性可以保持...