樂觀鎖和悲觀鎖的原理與應用

2021-09-26 11:34:44 字數 979 閱讀 1674

名稱

描述應用場景

樂觀鎖每次拿資料都認為不會修改,不上鎖,但是更新的時候會判斷在此期間別人有沒有去更新這個資料

版本號或時間戳控制,適用於高併發,讀多寫少的場景

悲觀鎖每次拿資料都認為會修改,所以每次拿資料的時候都會上鎖,只有等待鎖標記釋放,之後才能拿到資料

ddb的行鎖,表鎖等,適用於資料一致性比較高的場景,能夠減少併發

什麼時候使用樂觀鎖?

什麼時候使用悲觀鎖?

​ 一旦通過悲觀鎖鎖定乙個資源,那麼其他需要操作該資源的使用方,只能等待直到鎖被釋放,好處在於可以減少併發,但是當併發量非常大的時候,由於鎖消耗資源,並且可能鎖定時間過長。容易導致系統效能下降,資源消耗嚴重。因此一般我們可以在併發量不是很大,並且出現併發情況導致的異常使用者和系統都很難以接受的情況下,會選擇悲觀鎖進行。

優點缺點

樂觀鎖提高了吞吐量,效能和效率高,適用於併發量高,多讀少寫的場景

資源提交衝突,其他使用方需要重新讀取資源,會增加讀的次數。

悲觀鎖提高資料處理的安全性,適用於多寫場景,

會讓資料庫產生額外的開銷,還有增加產生死鎖的機會,降低並行性。

總結

1.樂觀鎖

​ 樂觀併發控制相信事務之間的資料競爭(data race)的概率是比較小的,因此盡可能直接做下去,直到提交的時候才去鎖定,所以不會產生任何鎖和死鎖。但如果直接簡單這麼做,還是有可能會遇到不可預期的結果,例如兩個事務都讀取了資料庫的某一行,經過修改以後寫回資料庫,這時就遇到了問題。

2.悲觀鎖

​ 悲觀併發控制實際上是「先取鎖再訪問」的保守策略,為資料處理的安全提供了保證。但是在效率方面,處理加鎖的機制會讓資料庫產生額外的開銷,還有增加產生死鎖的機會;另外,在唯讀型事務處理中由於不會產生衝突,也沒必要使用鎖,這樣做只能增加系統負載;還有會降低了並行性,乙個事務如果鎖定了某行資料,其他事務就必須等待該事務處理完才可以處理那行數。

樂觀鎖悲觀鎖應用

最近悟出來乙個道理,在這兒分享給大家 學歷代表你的過去,能力代表你的現在,學習代表你的將來。十年河東十年河西,莫欺少年窮 學無止境,精益求精 之前我的部落格 sql 樂觀鎖,悲觀鎖之於併發詳細介紹了樂觀鎖悲觀鎖的應用,在此,通過程式來驗證 首先,開啟sqlserver,新建一張表 create ta...

悲觀鎖與樂觀鎖

悲觀鎖與樂觀鎖 悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗 了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次一 個事務讀取某一條記錄後,就會把這條記...

樂觀鎖與悲觀鎖

悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次乙個事務讀取某一條記錄後,就會把這條記錄鎖住,這樣 其它的...