摘要:離線并發(fā)多個數(shù)據(jù)庫事務中支持多線程的各種應用服務器并發(fā)問題丟失更新同時編輯文件,相繼保存,最終丟失先保存者更新的內(nèi)容不一致性讀取期間,數(shù)據(jù)有更新執(zhí)行語境從與外界交互角度看的個語境請求對應于軟件工作的外部環(huán)境發(fā)出的單個調(diào)用,處理請求的軟件會決
離線并發(fā):多個數(shù)據(jù)庫事務中支持多線程的各種應用服務器
1. 并發(fā)問題: 1)丟失更新(同時編輯文件,相繼保存,最終丟失先保存者更新的內(nèi)容) 2)不一致性(讀取期間,數(shù)據(jù)有更新) 2. 執(zhí)行語境: 1)從與外界交互角度看的2個語境:請求:
對應于軟件工作的外部環(huán)境發(fā)出的單個調(diào)用,處理請求的軟件會決定是否返回一個應答(過程大部分是在服務器端進行,而客戶端則假設(shè)為在等待應答)
會話:
客戶端和服務器端之間一次長時間的交互
2)操作系統(tǒng)的2個語境: 進程:重量級的執(zhí)行語境,將其正在處理的內(nèi)部數(shù)據(jù)域外部隔離開(有效隔離,減少沖突,但需要消耗很多資源)
線程:輕量級的執(zhí)行語境,一個多帶帶的進程里可以存在多個線程(可以充分利用資源,但易導致并發(fā)問題)
3. 隔離與不變性:企業(yè)應用2個解決方案:
1)隔離: 方案1:劃分數(shù)據(jù),使得每一個片數(shù)據(jù)都只能被一個執(zhí)行單元訪問(操作系統(tǒng)為每個進程多帶帶分配一片內(nèi)存,并且只有這個進程可以對這片內(nèi)存進行讀寫操作)
方案2:文件鎖,一個人打開文件,其他人再無法打開或者只打開該文件只讀拷貝并且不能修改(好的并發(fā)設(shè)計應該是:找到各種創(chuàng)建隔離區(qū)的辦法,并且保證在每個隔離區(qū)里能夠完成盡可能多的任務)
2)不變性: 方案1:識別哪些是不變的數(shù)據(jù)(只有在共享數(shù)據(jù)可以修改的情況下,并發(fā)問題才會出現(xiàn)),不用考慮這些數(shù)據(jù)的并發(fā)問題二廣泛地共享它們
方案2:把那些只讀取數(shù)據(jù)的程序分開,讓他們只是用拷貝的數(shù)據(jù)源
4. 樂觀并發(fā)控制盒悲觀并發(fā)控制: 1)2種鎖: 樂觀鎖:關(guān)于沖突檢測的(僅當提交更新時才檢查沖突)
優(yōu)點:并發(fā)性高,限制較少,使用起來比較自由
缺點:業(yè)務數(shù)據(jù)比較復雜,難以自動合并,并且使用者難以發(fā)現(xiàn)差別時,只能丟棄原有數(shù)據(jù),從頭開始更新
悲觀鎖:關(guān)于沖突避免的(只要有人已是用當前數(shù)據(jù)或者文件,拒絕其他人使用當前數(shù)據(jù)或文件)
優(yōu)點:減少并發(fā)程度
缺點:用戶體驗差
兩種策略選擇標準:沖突的頻率與嚴重性(沖突少或者沖突后果不嚴重時,選擇樂觀鎖;否則選擇悲觀鎖)
2)避免不一致性: a. 檢測不一致讀:通過讀加鎖(read lock,共享鎖)和寫加鎖(write lock,排他鎖),可以一次多個人對同一份數(shù)據(jù)加只讀鎖,但只要有人得到一個只讀鎖,其他人就都無法得到寫鎖;一旦有人得到一個寫鎖,其他人都不能得到兩種所中任意一種
基于數(shù)據(jù)的某種版本標識(時間戳或者順序計數(shù)器),核對將要更新數(shù)據(jù)的版本標識和共享數(shù)據(jù)的版本標識,如果兩者一樣,系統(tǒng)允許更新數(shù)據(jù)并更新共享數(shù)據(jù)的版本標識
b. 時序讀:每次讀取數(shù)據(jù)時都是用某種時間戳或其他不變的標簽作為約束條件,數(shù)據(jù)庫根據(jù)時間或者標簽返回數(shù)據(jù)(源代碼控軟件可以用,但數(shù)據(jù)庫比較困難并且代價昂貴)
3)死鎖:處理死鎖的方法:
a. 用軟件來檢測死鎖的發(fā)生,選擇一個犧牲者,放棄他的工作和他所加的鎖;
b. 給每個鎖都加上時間限制,一旦達到時間限制,所加的鎖就會失效,工作就會丟失;
防止死鎖的方法:
強制人們在開始工作時就獲得所有可能需要的鎖,在此之后就不再允許得到更多的鎖;
可以硬性規(guī)定每個人獲得鎖的順序(如按姓名字母順序)
5. 事務: 1)ACID:原子性、一致性、隔離性、持久性
2)事務資源:定義:可以進行事務處理的任何事物
事務控制方法:保證事務盡可能短(盡可能不讓事務跨越多個請求,跨越多個請求的事務稱為長事務);
盡可能晚打開事務
3)減少事務隔離以提高靈活性: SQL的4種隔離級別:可串行化的、可重復讀、讀已提交、讀未提交
不必給所有的事務設(shè)置相同的隔離級別,而應該仔細觀察每個事務并根據(jù)每個事務具體情況來決定如何權(quán)衡靈活性與正確性
4)業(yè)務事務和系統(tǒng)事務: 系統(tǒng)事務:由關(guān)系數(shù)據(jù)庫系統(tǒng)和事務監(jiān)視器所支持的事務 (一般不用干預)
業(yè)務事務:簡單辦法:在單個系統(tǒng)事務中執(zhí)行完整的業(yè)務事務(產(chǎn)生長系統(tǒng)事務);
復雜的,采用離線并發(fā)(通過工作單元來保存更新數(shù)據(jù))
6. 離線并發(fā)控制的模式:樂觀離線鎖、悲觀離線鎖
7. 應用服務器并發(fā):每會話一線程 VS 每會話一進程:線程節(jié)省資源,但創(chuàng)建和進入隔離區(qū)很重要
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/30044.html
摘要:遠程外觀運行機制使用時機數(shù)據(jù)傳輸對象運行機制使用時機進一步閱讀 1.遠程外觀 (Remote Facade) 1.1運行機制 1.2使用時機 2.數(shù)據(jù)傳輸對象 (Data Transfer Object) 2.1 運行機制 2.2 使用時機 2.3 進一步閱讀
摘要:目前,中關(guān)村黑馬程序員訓練營已成長為行業(yè)學員質(zhì)量好課程內(nèi)容深企業(yè)滿意的移動開發(fā)高端訓練基地,并被評為中關(guān)村軟件園重點扶持人才企業(yè)。黑馬程序員的學員篩選制度,遠比現(xiàn)在以上的企業(yè)招聘流程更為嚴格。系統(tǒng)的學習可以參考w3c的教程 web概念概述 * JavaWeb: * 使用Java語言開發(fā)基于互聯(lián)網(wǎng)的項目 * 軟件架構(gòu): 1. C/S: Client/Server 客戶端/服務...
摘要:若以多線程的方式操作這些,則可能出現(xiàn)操作的沖突。另外,因為是單線程的,在某一時刻內(nèi)只能執(zhí)行特定的一個任務,并且會阻塞其它任務執(zhí)行。瀏覽器事件觸發(fā)線程事件觸發(fā)線程,當一個事件被觸發(fā)時該線程會把事件添加到任務隊列的隊尾,等待引擎的處理。 首先,說下為什么 JavaScript 是單線程? 總所周知,JavaScript是以單線程的方式運行的。說到線程就自然聯(lián)想到進程。那它們有什么聯(lián)系呢? ...
摘要:工作單元用于維護受業(yè)務事務影響的對象列表,并協(xié)調(diào)變化的寫入和并發(fā)問題的解決。工作單元控制器工作單元控制所有數(shù)據(jù)庫的讀操作,一旦對象被讀取,將將它注冊為干凈的對象。 1. 工作單元 用于維護受業(yè)務事務影響的對象列表,并協(xié)調(diào)變化的寫入和并發(fā)問題的解決。如下: showImg(https://segmentfault.com/img/remote/1460000018095222?w=162...
摘要:大家好,我是冰河有句話叫做投資啥都不如投資自己的回報率高。馬上就十一國慶假期了,給小伙伴們分享下,從小白程序員到大廠高級技術(shù)專家我看過哪些技術(shù)類書籍。 大家好,我是...
閱讀 1251·2023-04-26 03:02
閱讀 1313·2023-04-25 19:18
閱讀 2662·2021-11-23 09:51
閱讀 2644·2021-11-11 16:55
閱讀 2700·2021-10-21 09:39
閱讀 1787·2021-10-09 09:59
閱讀 2083·2021-09-26 09:55
閱讀 3610·2021-09-26 09:55