chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

淺談管理并發(fā)數(shù)據(jù)訪問:樂觀并發(fā)控制、悲觀并發(fā)控制

西西 ? 來源:博客園 ? 作者: 深圳大漠 ? 2020-09-22 15:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.并發(fā)沖突

當兩個進程試圖在同一時間修改同一數(shù)據(jù),就會產生沖突。

2.并發(fā)控制

有兩種方式管理并發(fā)數(shù)據(jù)訪問:樂觀并發(fā)控制、悲觀并發(fā)控制。

這兩種控制模式的區(qū)別在于,是在沖突發(fā)生前進行防止,還是在發(fā)生后采用某種方法來處理沖突。

3.悲觀并發(fā)控制

悲觀并發(fā)模式假定系統(tǒng)中存在足夠多的數(shù)據(jù)修改操作,以致任何確定的讀操作都可能會受到由別的用戶所制造的數(shù)據(jù)修改的影響。

也就是說,悲觀并發(fā)模式假定沖突總是會發(fā)生的。

悲觀并發(fā)控制是通過獨占正在被讀取的數(shù)據(jù)來避免沖突。

但是獨占數(shù)據(jù)會導致其它進程無法修改該數(shù)據(jù),進而產生阻塞——讀數(shù)據(jù)和寫數(shù)據(jù)會互相阻塞。

4.樂觀并發(fā)控制

樂觀并發(fā)模式假定系統(tǒng)的數(shù)據(jù)修改操作只會生產非常少的沖突,也就是說任何進程都不太可能修改別的進程正在訪問的數(shù)據(jù)。

樂觀并發(fā)模式下,讀數(shù)據(jù)和寫數(shù)據(jù)之間不會發(fā)生沖突,只有寫數(shù)據(jù)與寫數(shù)據(jù)之間會發(fā)生沖突。即讀數(shù)據(jù)不會產生阻塞,只有寫數(shù)據(jù)才會產生阻塞。

5.并發(fā)沖突生產的問題

5.1.丟失更新(Lost updates)

兩個進程同時讀取一筆數(shù)據(jù),然后進行修改,那么后提交的數(shù)據(jù)會覆蓋先提交的數(shù)據(jù)。

如果數(shù)據(jù)允許覆蓋式更新(比如用戶姓名),那么丟失更新并不算太大的問題,如果數(shù)據(jù)是累加式更新(比如庫存數(shù)量),那么丟失更新是非常嚴重的問題,并且在非并發(fā)模式下無法重復問題的發(fā)生。

5.2.臟讀(Dirty reads)

當一個進程更新了數(shù)據(jù),但(事務)未提交,這時候另一個進程讀取同一筆數(shù)據(jù),如果前一個進程取消了更新(事務回滾),那么后一個進程讀取的就是臟數(shù)據(jù)。

臟讀會產生嚴重的問題,在任何情況下都是不允許的。

5.3.不可重復讀(Non-repeatable reads)

當一個進程讀取了一筆數(shù)據(jù)后,另一個進程更新了同一筆數(shù)據(jù),然后第一個進程再次讀取同一筆數(shù)據(jù),卻得到了與第一次讀取不同的結果。

在事務A更新記錄之后(update Customers set Name = 'B' where Name = 'A'),事務B讀取相同記錄(select Name form Customers where Name = 'A'),但事務B拿到的是事務A更新之后的數(shù)據(jù)(Customers.Name的值為'B'),在事務B讀取記錄之后,事務A進行了事務回滾(Customers.Name的值為'A'),導致事務B的數(shù)據(jù)是不真實的。

5.4.幻讀(Phantoms)

幻讀與臟讀的相似之處在于:兩者都是兩次讀取的結果不一致。

不同之處在于:幻讀是兩次讀取的記錄數(shù)量不一致,而臟讀是兩次讀取的記錄的數(shù)據(jù)不一致。

事務A讀取記錄之后(select * from Customers where Name like 'A%'),事務B又插入了符合事務A讀取條件的新記錄(insert into Customers(Name) values('AAA')),那么當事務A再用相同條件讀取記錄時,得到的集合卻與上一次讀取不同(多了記錄)。

6.隔離級別

SQL Server2005支持5種隔離級別來控制沖突。其中三種只在悲觀并發(fā)模式中使用,一種只在樂觀并發(fā)模式中使用,另一個可以在兩種模式中使用。

6.1.未提交讀(Uncommitted Read)

未提交讀只能防止“丟失更新”問題,其它問題不能防止。

未提交讀是針對阻塞太頻繁的悲觀并發(fā)控制,因為它只是忽略了鎖,而不保障事務的一致性。

6.2.已提交讀(Read Committed)

已提交讀既可以是樂觀的也可以是悲觀的,這取決于數(shù)據(jù)庫的read_committed_snapshot設置。默認情況下這個選項是關閉的,所以該隔離級別默認情況下是采用悲觀并發(fā)控制。

已提交讀可以防止臟讀問題。

6.3.可重復讀(Repeatable Read)

可重復讀是一種悲觀的隔離級別。它在已提交讀的基礎上增加了新特性:確保當事務重新訪問數(shù)據(jù)或查詢被再一次執(zhí)行時,數(shù)據(jù)將不會再發(fā)生改變。

可重復讀不但可以防止臟讀問題,還可以防止不可重復讀問題,但是不能防止幻讀問題。

注意,可重復讀的資源開銷是很大的,事務中所有的數(shù)據(jù)必須等待事務完成之后才能訪問。

6.4.快照(Snapshot)

快照是一種樂觀隔離級別。

Snapshot事務中任何語句所讀取的記錄,都是事務啟動時的數(shù)據(jù)。

這相當于事務啟動時,數(shù)據(jù)庫為事務生成了一份專用“快照”。

在當前事務中看到不其它事務在當前事務啟動之后所進行的數(shù)據(jù)修改。

Snapshot事務不會讀取記錄時要求鎖定,讀取記錄的Snapshot事務不會鎖住其它事務寫入記錄,寫入記錄的事務也不會鎖住Snapshot事務讀取數(shù)據(jù)。

快照隔離級別的事務不是串行執(zhí)行的,兩個進程同時使用快照隔離,如果它們執(zhí)行多次,可能最終產生的結果不會一致。(這段話要證實)

6.5.可串行化(Serializable)

可串行化是一種悲觀隔離級別。它在可重復讀的基礎上增加了新的特性:確保在兩次查詢的中間,不會增加新的行。

可串行化是最健壯的悲觀隔離級別,因為它防止了并發(fā)沖突產生的4個問題。

可串行化也是資源開銷最大的措施。當使用可串行化隔離時,如果SQL的條件字段沒有索引,那么SQL Server會產生表級鎖。

6.6.總結

7.鎖

7.1.死鎖

當二或多個工作各自具有某個資源的鎖定,但其它工作嘗試要鎖定此資源,而造成工作永久封鎖彼此時,會發(fā)生死鎖。例如:

1.事務A取得數(shù)據(jù)列1的共享鎖定。

2.事務B取得數(shù)據(jù)列2的共享鎖定。

3.事務A現(xiàn)在要求數(shù)據(jù)列2的獨占鎖定,但會被封鎖直到事務B完成并釋出對數(shù)據(jù)列2的共享鎖定為止。

4.事務B現(xiàn)在要求數(shù)據(jù)列1的獨占鎖定,但會被封鎖直到事務A完成并釋出對數(shù)據(jù)列1的共享鎖定為止。

等到事務B完成后,事務A才能完成,但事務B被事務A封鎖了。這個狀況也稱為「循環(huán)相依性」(Cyclic Dependency)。事務A相依于事務B,并且事務B也因為相依于事務A而封閉了這個循環(huán)。

例如以下操作就會產生死鎖,兩個連接互相阻塞對方的update。

連接1:

begin tran

select * from customers

update customers set CompanyName = CompanyName

waitfor delay '00:00:05'

select * from Employees

–因為Employees被連接2鎖住了,所以這里會阻塞。

update Employees set LastName = LastName

commit tran

連接2:

begin tran

select * from Employees

update Employees set LastName = LastName

waitfor delay '00:00:05'

select * from customers

--因為customers被連接1鎖住了,所以這里會阻塞。

update customers set CompanyName = CompanyName

commit tran

SQL Server遇到死鎖時會自動殺死其中一個事務,而另一個事務會正常結束(提交或回滾)。

SQL Server對殺死的連接返回錯誤代碼是1205,異常提示是:

Your transaction (process ID #52) was deadlocked on {lock | communication buffer | thread} resources with another process and has been chosen as the deadlock victim. Rerun your transaction.

除了Read Uncommitted和Snapshot,其它類型的事務都可能產生死鎖。

7.2.悲觀鎖

悲觀鎖是指假設并發(fā)更新沖突會發(fā)生,所以不管沖突是否真的發(fā)生,都會使用鎖機制。

悲觀鎖會完成以下功能:鎖住讀取的記錄,防止其它事務讀取和更新這些記錄。其它事務會一直阻塞,直到這個事務結束。

悲觀鎖是在使用了數(shù)據(jù)庫的事務隔離功能的基礎上,獨享占用的資源,以此保證讀取數(shù)據(jù)一致性,避免修改丟失。

悲觀鎖可以使用Repeatable Read事務,它完全滿足悲觀鎖的要求。

7.3.樂觀鎖

樂觀鎖不會鎖住任何東西,也就是說,它不依賴數(shù)據(jù)庫的事務機制,樂觀鎖完全是應用系統(tǒng)層面的東西。

如果使用樂觀鎖,那么數(shù)據(jù)庫就必須加版本字段,否則就只能比較所有字段,但因為浮點類型不能比較,所以實際上沒有版本字段是不可行的。

7.4.悲觀離線鎖

悲觀離線鎖是應用程序級別的機制,它是由應用程序實現(xiàn)的,不是數(shù)據(jù)庫實現(xiàn)的。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 死鎖
    +關注

    關注

    0

    文章

    25

    瀏覽量

    8278
  • 并發(fā)控制機制

    關注

    0

    文章

    2

    瀏覽量

    5691
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何理解工業(yè)數(shù)據(jù)中臺的高并發(fā)能力

    工業(yè)數(shù)據(jù)中臺的高并發(fā)能力是指其在同一時間段內高效處理大量設備數(shù)據(jù)讀寫、分析請求的能力,這是保障工業(yè)數(shù)據(jù)實時采集、傳輸、處理與決策響應穩(wěn)定性和高效性的關鍵。以下從核心價值、技術實現(xiàn)、應用
    的頭像 發(fā)表于 10-15 11:49 ?140次閱讀

    別再卡分頁!淘寶全量商品接口實戰(zhàn)開發(fā)指南:從并發(fā)優(yōu)化到數(shù)據(jù)完整性閉環(huán)

    淘寶店鋪全量商品接口實戰(zhàn)指南:詳解權限申請、分頁優(yōu)化、并發(fā)拉取與增量更新,結合代碼實現(xiàn)高效穩(wěn)定的數(shù)據(jù)獲取,解決超時、限流、數(shù)據(jù)丟失等核心難題,助力電商數(shù)據(jù)分析避坑提效。
    的頭像 發(fā)表于 09-30 10:47 ?188次閱讀

    創(chuàng)建并發(fā)布測試版本(一)

    創(chuàng)建并發(fā)布測試版本,并選擇您要分發(fā)的測試群組。邀請測試最多允許100個版本同時在架,邀請測試和公開測試的總計版本數(shù)量不超過100個。 1.在左側導航欄選擇“應用測試>版本列表”,進入
    發(fā)表于 09-16 15:21

    Task任務:LuatOS實現(xiàn)“任務級并發(fā)”的核心引擎

    Task任務通過其強大的并發(fā)處理能力,使LuatOS能夠在單線程環(huán)境中模擬多線程執(zhí)行,通過協(xié)程的掛起與恢復機制,實現(xiàn)任務級的并行操作,顯著提升系統(tǒng)效能。 sys核心庫是LuatOS運行框架庫,也是
    的頭像 發(fā)表于 08-28 13:49 ?236次閱讀
    Task任務:LuatOS實現(xiàn)“任務級<b class='flag-5'>并發(fā)</b>”的核心引擎

    Nginx高并發(fā)優(yōu)化方案

    作為一名在生產環(huán)境中摸爬滾打多年的運維工程師,我見過太多因為Nginx配置不當導致的性能瓶頸。今天分享一套完整的Nginx高并發(fā)優(yōu)化方案,幫助你的系統(tǒng)從10萬QPS突破到百萬級別。
    的頭像 發(fā)表于 08-13 15:51 ?502次閱讀

    第三屆大會回顧第3期 | FFRT并發(fā)框架在OpenHarmony中的設計與實踐

    ,特別是在多核處理器上,可以顯著提高程序的運行速度和整體性能,從而改善用戶體驗。OpenHarmony的FFRT并發(fā)編程模型為開發(fā)者提供了構建異步并發(fā)任務的能力,以更高效地開發(fā)和管理并發(fā)
    的頭像 發(fā)表于 06-21 16:53 ?723次閱讀
    第三屆大會回顧第3期 | FFRT<b class='flag-5'>并發(fā)</b>框架在OpenHarmony中的設計與實踐

    鴻蒙5開發(fā)寶藏案例分享---應用并發(fā)設計

    ?** 鴻蒙并發(fā)編程實戰(zhàn)指南:解鎖ArkTS多線程黑科技** 嘿,開發(fā)者朋友們! 今天給大家扒一扒鴻蒙官方文檔里藏著的并發(fā)編程寶藏—— 100+實戰(zhàn)場景解決方案 !從金融理財?shù)接螒蜷_發(fā),從折疊屏適配
    發(fā)表于 06-12 16:19

    HarmonyOS實戰(zhàn):一招解決等待多個并發(fā)結果

    講解開發(fā)過程中遇到的并發(fā)問題,官方API 11文檔寫的太簡單了,根本沒有解決方案,小編也是苦思冥想,絞盡腦汁才找到解決方案。需要開發(fā)鴻蒙的小伙伴可以仔細閱讀,避免踩坑。** 問題 在開發(fā)清除緩存的功能時,鴻蒙NEXT提供的文檔中說明,應用緩存文件
    的頭像 發(fā)表于 06-09 14:57 ?257次閱讀
    HarmonyOS實戰(zhàn):一招解決等待多個<b class='flag-5'>并發(fā)</b>結果

    Ingress網(wǎng)關高并發(fā)請求的解決方案

    當 Ingress 網(wǎng)關面臨高并發(fā)請求(如 QPS 超過 10萬+)時,可能導致服務崩潰、響應延遲激增或資源耗盡。
    的頭像 發(fā)表于 05-14 11:52 ?531次閱讀

    【道生物聯(lián)TKB-620開發(fā)板試用】定期休眠并發(fā)數(shù)據(jù)

    FSM_RCVDATA時,采集并發(fā)數(shù)據(jù),隨后進入休眠: while (1) { ScreenRefresh(); KeyInfoUpdate(); FSM_Manager
    發(fā)表于 04-29 07:29

    RAKsmart服務器如何重塑AI高并發(fā)算力格局

    在AI大模型參數(shù)量突破萬億級、實時推理需求激增的當下,傳統(tǒng)服務器架構的并發(fā)處理能力已逼近物理極限。RAKsmart通過“硬件重構+軟件定義”的雙引擎創(chuàng)新,推出新一代AI服務器解決方案。下面,AI部落小編為您解析RAKsmart服務器如何重塑AI高并發(fā)算力格局。
    的頭像 發(fā)表于 04-03 10:37 ?499次閱讀

    TurMass? 如何幫助解決 UWB 定位系統(tǒng)大規(guī)模終端標簽高并發(fā)通信沖突問題?

    在大容量定位終端數(shù)據(jù)并發(fā)場景中,現(xiàn)有通信技術因信號沖突、系統(tǒng)容量受限等問題,難以滿足需求。TurMass? 通信技術通過多信道設計、時隙劃分、定位與通信一體化等創(chuàng)新方案,有效解決了高并發(fā)場景下的技術難題,為 UWB 定位系統(tǒng)的
    的頭像 發(fā)表于 03-17 14:38 ?625次閱讀
    TurMass? 如何幫助解決 UWB 定位系統(tǒng)大規(guī)模終端標簽高<b class='flag-5'>并發(fā)</b>通信沖突問題?

    RK3568驅動指南|第三篇-并發(fā)與競爭-第19章 并發(fā)與競爭實驗

    RK3568驅動指南|第三篇-并發(fā)與競爭-第19章 并發(fā)與競爭實驗
    的頭像 發(fā)表于 02-24 16:26 ?753次閱讀
    RK3568驅動指南|第三篇-<b class='flag-5'>并發(fā)</b>與競爭-第19章 <b class='flag-5'>并發(fā)</b>與競爭實驗

    星型組網(wǎng)對并發(fā)用戶有限制嗎?

    星型組網(wǎng)對并發(fā)用戶的數(shù)量確實存在一定的限制,這些限制主要來源于以下幾個方面: 一、中心節(jié)點的性能和容量 在星型組網(wǎng)中,所有設備都通過中心節(jié)點(如交換機或路由器)進行數(shù)據(jù)傳輸,因此中心節(jié)點的性能和容量
    的頭像 發(fā)表于 02-23 17:18 ?511次閱讀

    一文詳解CMP并發(fā)多協(xié)議

    隨著無線通信的不斷發(fā)展,對可同時支持多個協(xié)議的設備的需求顯著增加。此功能稱為并發(fā)多協(xié)議(Concurrent Multiprotocol, CMP),允許設備同時在不同無線標準下運行,從而提高設備的多功能性和適應性。
    的頭像 發(fā)表于 01-03 10:12 ?1376次閱讀
    一文詳解CMP<b class='flag-5'>并發(fā)</b>多協(xié)議