悲觀鎖與樂觀鎖

悲觀鎖:假定併發環境是悲觀的,若是發生併發衝突,就會破壞一致性,因此要經過獨佔鎖完全禁止衝突發生。有一個經典比喻,「若是你不鎖門,那麼搗蛋鬼就回闖入並搞得一團糟」,因此「你只能一次打開門放進一我的,才能時刻盯緊他」。併發

 

樂觀鎖:假定併發環境是樂觀的,即,雖然會有併發衝突,但衝突可發現且不會形成損害,因此,能夠不加任何保護,等發現併發衝突後再決定放棄操做仍是重試。可類比的比喻爲,「若是你不鎖門,那麼雖然搗蛋鬼會闖入,但他們一旦打算破壞你就能知道」,因此「你大能夠放進全部人,等發現他們想破壞的時候再作決定」。性能

 

一般認爲樂觀鎖的性能比悲觀所更高,特別是在某些複雜的場景。這主要因爲悲觀鎖在加鎖的同時,也會把某些不會形成破壞的操做保護起來;而樂觀鎖的競爭則只發生在最小的併發衝突處,若是用悲觀鎖來理解,就是「鎖的粒度最小」。但樂觀鎖的設計每每比較複雜,所以,複雜場景下仍是多用悲觀鎖。設計

 

首先保證正確性,有必要的話,再去追求性能。樂觀鎖

相關文章
相關標籤/搜索