并發(fā)編程模型-編程開發(fā)技術(shù)

并發(fā)編程模型-編程開發(fā)技術(shù)

ID:30833880

大?。?40.93 KB

頁數(shù):10頁

時(shí)間:2019-01-03

并發(fā)編程模型-編程開發(fā)技術(shù)_第1頁
并發(fā)編程模型-編程開發(fā)技術(shù)_第2頁
并發(fā)編程模型-編程開發(fā)技術(shù)_第3頁
并發(fā)編程模型-編程開發(fā)技術(shù)_第4頁
并發(fā)編程模型-編程開發(fā)技術(shù)_第5頁
資源描述:

《并發(fā)編程模型-編程開發(fā)技術(shù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、并發(fā)編程模型-編程開發(fā)技術(shù)并發(fā)編程模型譯文出處:林威建[weakielin@gmail.com]原文出處:JakobJenkov并發(fā)系統(tǒng)口J以采用多種并發(fā)編程模型來實(shí)現(xiàn)。并發(fā)模型指定了系統(tǒng)中的線程如何通過協(xié)作來完成分配給它們的作業(yè)。不同的并發(fā)模型采用不同的方式拆分作業(yè),同時(shí)線程間的I■辦作和交互方式也不相同。這篇并發(fā)模型教程將會(huì)較深入地介紹目前(2015年,本文撰寫時(shí)間)比較流行的兒種并發(fā)模型。并發(fā)模型與分布式系統(tǒng)之間的相似性本文所描述的并發(fā)模型類似于分布式系統(tǒng)中使用的很多體系結(jié)構(gòu)。在并發(fā)系統(tǒng)中線程Z間可以相互通信。在分布式系統(tǒng)屮進(jìn)程Z間也可以相互通信(進(jìn)程冇可能在不同的機(jī)器中)。線程和進(jìn)程

2、之間具有很多相似的特性。這也就是為什么很多并發(fā)模型通常類似于各種分布式系統(tǒng)架構(gòu)。當(dāng)然,分布式系統(tǒng)在處理網(wǎng)絡(luò)失效、遠(yuǎn)程主機(jī)或進(jìn)程宕掉等方面也面臨著額外的挑戰(zhàn)。但是運(yùn)行在巨型服務(wù)器上的并發(fā)系統(tǒng)也可能遇到類似的問題,比如一塊CPU失效、一塊網(wǎng)卡失效或一個(gè)磁盤損壞等情況。雖然出現(xiàn)失效的概率可能很低,但是在理論上仍然有可能發(fā)生。由于并發(fā)模型類似于分布式系統(tǒng)架構(gòu),因此它們通??梢曰ハ嘟梃b思想。例如,為工作者們(線程)分配作業(yè)的模型一般與分布式系統(tǒng)中的負(fù)載均衡系統(tǒng)比較相似。同樣,它們?cè)谌罩居涗?、失效轉(zhuǎn)移、幕等性等錯(cuò)誤處理技術(shù)上也具有相似性?!咀ⅲ耗坏刃裕粋€(gè)幕等操作的特點(diǎn)是其任意多次執(zhí)行所產(chǎn)生的影響均與一

3、次執(zhí)行的影響相同】并行工作者第一種并發(fā)模型就是我所說的并行工作者模型。傳入的作業(yè)會(huì)被分配到不同的工作者上。下圖展示了并行工作者模型:在并行工作者模型中,委派者(Dele聊tot)將傳入的作業(yè)分配給不同的工作者。每個(gè)工作者完成整個(gè)任務(wù)。工作者們并行運(yùn)作在不同的線程上,茯至可能在不同的CPU上。如果在某個(gè)汽車廠里實(shí)現(xiàn)了并行工作者模型,每臺(tái)車都會(huì)由一個(gè)工人來生產(chǎn)。工人們將拿到汽車的生產(chǎn)規(guī)格,并且從頭到尾負(fù)責(zé)所有工作。在J3V3應(yīng)用系統(tǒng)中,并行工作者模型是最常見的并發(fā)模型(即使止在轉(zhuǎn)變)。java.util,concurrent包屮的許多并發(fā)實(shí)用工具都是設(shè)計(jì)用丁?這個(gè)模型的。你也可以在Java企業(yè)級(jí)

4、(J2EE)應(yīng)用服務(wù)器的設(shè)計(jì)中看到這個(gè)模型的蹤跡。并行工作者模型的優(yōu)點(diǎn)并行工作者模式的優(yōu)點(diǎn)是,它很容易理解。你只需添加更多的工作者來提高系統(tǒng)的并行度。例如,如果你正在做一個(gè)網(wǎng)絡(luò)爬蟲,可以試試使用不同數(shù)量的工作者抓取到一定數(shù)量的頁面,然后看看多少數(shù)量的工作者消耗的時(shí)間最短(意味著性能最高)。由于網(wǎng)絡(luò)爬蟲是一個(gè)10密集型工作,最終結(jié)果很有可能是你電腦小的每個(gè)CPU或核心分配了幾個(gè)線程。每個(gè)CPU若只分配一個(gè)線程可能有點(diǎn)少,因?yàn)樵诘却龜?shù)據(jù)下載的過程中CPU將會(huì)空閑大量時(shí)間。并行工作者模型的缺點(diǎn)并行工作者模型雖然看起來簡單,卻隱藏著一些缺點(diǎn)。接下來的章節(jié)中我會(huì)分析一些最明顯的弱點(diǎn)。共享狀態(tài)可能會(huì)很復(fù)

5、雜在實(shí)際應(yīng)用中,并行工作者模型可能比前面所描述的情況耍復(fù)雜得多。共享的工作者經(jīng)常需要訪問一些共享數(shù)據(jù),無論是內(nèi)存屮的或者共享的數(shù)據(jù)庫屮的。下圖展示了并行工作者模型是如何變得復(fù)雜的:有些共享狀態(tài)是在像作業(yè)隊(duì)列這樣的通信機(jī)制卜?。但也有一些共享狀態(tài)是業(yè)務(wù)數(shù)據(jù),數(shù)據(jù)緩存,數(shù)據(jù)庫連接池等。一旦共享狀態(tài)潛入到并行工作者模型中,將會(huì)使情況變得復(fù)雜起來。線程需要以某種方式存取共享數(shù)據(jù),以確保某個(gè)線程的修改能夠?qū)ζ渌€程可見(數(shù)據(jù)修改需要同步到主存中,不僅僅將數(shù)據(jù)保存在執(zhí)行這個(gè)線程的CPU的緩存中)。線程需要避免竟態(tài),死鎖以及很多其他共享狀態(tài)的并發(fā)性問題。此外,在等待訪問共享數(shù)據(jù)結(jié)構(gòu)時(shí),線程Z間的互相等待將

6、會(huì)丟失部分并行性。許多并發(fā)數(shù)據(jù)結(jié)構(gòu)是阻塞的,意味著在任何一個(gè)時(shí)間只有一個(gè)或者很少的線程能夠訪問。這樣會(huì)導(dǎo)致在這些共享數(shù)據(jù)結(jié)構(gòu)上出現(xiàn)競爭狀態(tài)。在執(zhí)行需要訪問共享數(shù)據(jù)結(jié)構(gòu)部分的代碼時(shí),高競爭基本上會(huì)導(dǎo)致執(zhí)行時(shí)出現(xiàn)一定程度的串行化。現(xiàn)在的非阻塞并發(fā)算法也許可以降低競爭并提升性能,但是非阻塞算法的實(shí)現(xiàn)比較困難??沙志没臄?shù)據(jù)結(jié)構(gòu)是另一種選擇。在修改的時(shí)候,可持久化的數(shù)據(jù)結(jié)構(gòu)總是保護(hù)它的前一個(gè)版木不受影響。因此,如果多個(gè)線程指向同一個(gè)可持久化的數(shù)據(jù)結(jié)構(gòu),并且其中一個(gè)線程進(jìn)行了修改,進(jìn)行修改的線程會(huì)獲得一個(gè)指向新結(jié)構(gòu)的引用。所有其他線程保持對(duì)舊結(jié)構(gòu)的引用,舊結(jié)構(gòu)沒有被修改并且因此保證一致性。Scala編

7、程包含兒個(gè)持久化數(shù)據(jù)結(jié)構(gòu)?!咀ⅲ哼@里的可持久化數(shù)據(jù)結(jié)構(gòu)不是指持久化存儲(chǔ),而是一種數(shù)據(jù)結(jié)構(gòu),比如Java中的String類,以及CopyOnWriteArrayList類,具體可參考】雖然可持久化的數(shù)據(jù)結(jié)構(gòu)在解決共享數(shù)據(jù)結(jié)構(gòu)的并發(fā)修改時(shí)顯得很優(yōu)雅,但是可持久化的數(shù)據(jù)結(jié)構(gòu)的表現(xiàn)往往不盡人意。比如說,一個(gè)可持久化的鏈表需要在頭部插入一個(gè)新的節(jié)點(diǎn),并且返冋指向這個(gè)新加入的節(jié)點(diǎn)的一個(gè)引用(這個(gè)節(jié)點(diǎn)指向了鏈表的剩余部分)

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。