悲觀鎖是一種利用資料庫內部機制提供的鎖的方法,也就是對更新的資料加鎖,這樣在併發期間一旦有乙個事務持有了資料庫記錄的鎖,那麼其他執行緒將會被掛起,直到當前更新操作提交事務才能搶占資源進行更新。
悲觀鎖會降低效能,原因是:當一條請求搶占資源後,其他的請求就得不到資源,這時,cpu就會將這些沒有得到資源的執行緒掛起,掛起的執行緒會消耗cpu的資源,尤其是在高併發的請求中。
樂觀鎖是一種不會阻塞其他執行緒併發的機制,不使用資料庫的鎖進行實現,也稱為非阻塞鎖,使用的是cas原理。
cas原理:對於多個執行緒共同的資源,先儲存乙個舊值(old value),經過邏輯處理後,查詢當前資料庫中的值是否與舊值相等,如果相等,就更新資料,如果不相等,說明資料庫中的資料已經被其他執行緒修改過了,不再進行操作。
悲觀鎖和樂觀鎖
1.悲觀鎖,正如其名,它指的是對資料被外界 包括本系統當前的其他事務,以及來自外部系統的事務處理 修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定狀態。悲觀鎖的實現,往往依靠資料庫提供的鎖機制 也只有資料庫層提供的鎖機制才能真正保證資料訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無...
悲觀鎖和樂觀鎖
前幾天有人問了我乙個問題,說如果資料庫某些操作不用事務,那麼又需要保持資料的一致性,那麼該用什麼方法替代事務。我就想到了悲觀鎖和樂觀鎖的思想,下面我解釋一下在資料庫中的悲觀鎖和樂觀鎖 1.悲觀鎖就是把資料庫的一些操作,放在事務當中,依賴資料庫的隔離級別,實現對資料修改的封鎖,這樣做資料一致性可以保持...
悲觀鎖和樂觀鎖
悲觀鎖 pessimistic lock 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。樂觀鎖 optim...