悲觀鎖樂(lè)觀鎖的定義

悲觀鎖,正如其名,具有強(qiáng)烈的獨(dú)占和排他特性,它指的是對(duì)數(shù)據(jù)被外界修改持保守態(tài)度。樂(lè)觀鎖機(jī)制采取了更加寬松的加鎖機(jī)制,樂(lè)觀鎖是相對(duì)悲觀鎖而言,也是為了避免數(shù)據(jù)庫(kù)幻讀、業(yè)務(wù)處理時(shí)間過(guò)長(zhǎng)等原因引起數(shù)據(jù)處理錯(cuò)誤的一種機(jī)制。

悲觀鎖樂(lè)觀鎖的定義

樂(lè)觀鎖( Optimistic Locking )

樂(lè)觀鎖是相對(duì)悲觀鎖而言的,樂(lè)觀鎖假設(shè)數(shù)據(jù)一般情況下不會(huì)造成沖突,所以在數(shù)據(jù)進(jìn)行提交更新的時(shí)候,才會(huì)正式對(duì)數(shù)據(jù)的沖突與否進(jìn)行檢測(cè),如果發(fā)現(xiàn)沖突了,則返回給用戶錯(cuò)誤的信息,讓用戶決定如何去做。

百度百科:
樂(lè)觀鎖機(jī)制采取了更加寬松的加鎖機(jī)制。樂(lè)觀鎖是相對(duì)悲觀鎖而言,也是為了避免數(shù)據(jù)庫(kù)幻讀、業(yè)務(wù)處理時(shí)間過(guò)長(zhǎng)等原因引起數(shù)據(jù)處理錯(cuò)誤的一種機(jī)制,但樂(lè)觀鎖不會(huì)刻意使用數(shù)據(jù)庫(kù)本身的鎖機(jī)制,而是依據(jù)數(shù)據(jù)本身來(lái)保證數(shù)據(jù)的正確性。

相對(duì)于悲觀鎖,在對(duì)數(shù)據(jù)庫(kù)進(jìn)行處理的時(shí)候,樂(lè)觀鎖并不會(huì)使用數(shù)據(jù)庫(kù)提供的鎖機(jī)制。一般的實(shí)現(xiàn)樂(lè)觀鎖的方式就是記錄數(shù)據(jù)版本。

悲觀鎖樂(lè)觀鎖的定義

樂(lè)觀并發(fā)控制相信事務(wù)之間的數(shù)據(jù)競(jìng)爭(zhēng)(data race)的概率是比較小的,因此盡可能直接做下去,直到提交的時(shí)候才去鎖定,所以不會(huì)產(chǎn)生任何鎖和死鎖。

悲觀鎖(Pessimistic Lock)

當(dāng)要對(duì)數(shù)據(jù)庫(kù)中的一條數(shù)據(jù)進(jìn)行修改的時(shí)候,為了避免同時(shí)被其他人修改,最好的辦法就是直接對(duì)該數(shù)據(jù)進(jìn)行加鎖以防止并發(fā)。這種借助數(shù)據(jù)庫(kù)鎖機(jī)制,在修改數(shù)據(jù)之前先鎖定,再修改的方式被稱之為悲觀并發(fā)控制【又名“悲觀鎖”,Pessimistic Concurrency Control,縮寫“PCC”】。

百度百科:
悲觀鎖,正如其名,具有強(qiáng)烈的獨(dú)占和排他特性。它指的是對(duì)數(shù)據(jù)被外界(包括本系統(tǒng)當(dāng)前的其他事務(wù),以及來(lái)自外部系統(tǒng)的事務(wù)處理)修改持保守態(tài)度。因此,在整個(gè)數(shù)據(jù)處理過(guò)程中,將數(shù)據(jù)處于鎖定狀態(tài)。悲觀鎖的實(shí)現(xiàn),往往依靠數(shù)據(jù)庫(kù)提供的鎖機(jī)制(也只有數(shù)據(jù)庫(kù)層提供的鎖機(jī)制才能真正保證數(shù)據(jù)訪問(wèn)的排他性,否則,即使在本系統(tǒng)中實(shí)現(xiàn)了加鎖機(jī)制,也無(wú)法保證外部系統(tǒng)不會(huì)修改數(shù)據(jù))。

之所以叫做悲觀鎖,是因?yàn)檫@是一種對(duì)數(shù)據(jù)的修改抱有悲觀態(tài)度的并發(fā)控制方式。我們一般認(rèn)為數(shù)據(jù)被并發(fā)修改的概率比較大,所以需要在修改之前先加鎖。

悲觀鎖主要分為共享鎖或排他鎖

  • 共享鎖【Shared lock】又稱為讀鎖,簡(jiǎn)稱S鎖。顧名思義,共享鎖就是多個(gè)事務(wù)對(duì)于同一數(shù)據(jù)可以共享一把鎖,都能訪問(wèn)到數(shù)據(jù),但是只能讀不能修改。

  • 排他鎖【Exclusive lock】又稱為寫鎖,簡(jiǎn)稱X鎖。顧名思義,排他鎖就是不能與其他鎖并存,如果一個(gè)事務(wù)獲取了一個(gè)數(shù)據(jù)行的排他鎖,其他事務(wù)就不能再獲取該行的其他鎖,包括共享鎖和排他鎖,但是獲取排他鎖的事務(wù)是可以對(duì)數(shù)據(jù)行讀取和修改。

悲觀并發(fā)控制實(shí)際上是“先取鎖再訪問(wèn)”的保守策略,為數(shù)據(jù)處理的安全提供了保證。

悲觀鎖樂(lè)觀鎖的定義

但是在效率方面,處理加鎖的機(jī)制會(huì)讓數(shù)據(jù)庫(kù)產(chǎn)生額外的開(kāi)銷,還有增加產(chǎn)生死鎖的機(jī)會(huì)。另外還會(huì)降低并行性,一個(gè)事務(wù)如果鎖定了某行數(shù)據(jù),其他事務(wù)就必須等待該事務(wù)處理完才可以處理那行數(shù)據(jù)。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊9 分享