樂觀鎖和悲觀鎖的區別和使用場合

樂觀鎖和悲觀鎖的區別和使用場合

一:樂觀鎖(Optimistic Lock)

每次獲取數據的時候,都不會擔心數據會被修改,所以每次獲取數據時都不會進行加鎖。

但是在更新數據的時候,需要判斷該數據是否被別人修改過,如果數據被其他線程修改過,則不進行數據更新。

如果數據沒有被其他線程修改,則進行數據更新。由於數據沒有進行加鎖,期間該數據可以被其他線程進行讀寫操作。

二:悲觀鎖(Pessimistic Lock)

每次獲取數據的時候,都會擔心數據會被修改,所以每次獲取數據的時候都會進行加鎖,

確保在自己使用的過程中數據不被別人修改,使用完後進行數據解鎖。

由於數據會進行加鎖,期間對該數據進行讀寫和其他線程都會進行等待。

三:適用場合

樂觀鎖:比較適合讀取操作比較頻繁的場合。

如果出現大量的寫入操作,數據發生衝突的可能性就會增大,爲了保證數據的一致性,

應用層需要不斷的重新獲取數據,這樣會增加大量的查詢操作,降低了系統的吞吐量。

悲觀鎖:比較適合寫入操作比較頻繁的場合。

如果出現大量的讀取操作,每次讀取的時候都會進行加鎖,這樣會增加大量的鎖的開銷,降低了系統的吞吐量。

總結:兩種鎖各有各的優點,讀取頻繁使用樂觀鎖,寫入頻繁使用悲觀鎖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章