避免併發
隔離性和不變性
1、隔離
劃分數據,使得每一片數據只能被一個執行單元訪問。
隔離是一種減少錯誤發生的有效技術。可以使用隔離方法安排資源,以便程序進入的是隔離區,而無需考慮併發問題。
好的併發設計應該是:找個各種創建隔離區的方法,並且保證每個隔離區裏能夠完成儘可能多的任務。
2、不變性
只有共享數據可以修改的情況下,纔會出現併發問題。所以,一個避免併發衝突的方法是識別哪些是不變的數據。
通過定義某些不變的數據,或者至少是幾乎總不變的,就可以不用考慮這些數據的併發。
併發處理
樂觀鎖和悲觀鎖
1、樂觀鎖
使用版本號,時間戳等,在提交數據時進行比對,來檢測衝突,它其實不是鎖,只是一種衝突檢測策略。
2、悲觀鎖
同一個時間段,只能有一個執行單元來修改數據,其他執行單元必須等待它執行完才能獲取數據。它是一種衝突避免策略。
3、選擇使用哪一種鎖?
選擇標準是:衝突的頻繁性和嚴重性。如果衝突很少,或者後果不是很嚴重,那麼通常情況下選擇樂觀鎖策略。
如果衝突的結果對用戶來說是痛苦的,那麼就要使用悲觀鎖策略。