鏈接:Basics: Parallel, Concurrent, and Distributed
原文作者:Mark C.Chu-Carroll
本文的誕生也不過得源于在我曾經(jīng)開始談?wù)撽P(guān)于π演算 (π-calculus)時(shí)的帖子中所提出的問題,但是我認(rèn)為這的確是有趣到足以置頂?shù)奶印H绻犚娔橙苏務(wù)撽P(guān)于計(jì)算機(jī)和軟件時(shí),有三個(gè)詞常常會(huì)出現(xiàn)在你的耳邊:并行(parallel),并發(fā)(concurrent)和分布(distributed).乍一聽,它們似乎指代的是同一類事物,但是實(shí)際上,它們是三類不同的事物,它們之間的差異舉足輕重。
它們近似相通的地方是,都是描述計(jì)算機(jī)硬件和軟件組成的系統(tǒng)體系結(jié)構(gòu),以達(dá)到同一時(shí)間處理多項(xiàng)任務(wù)的目的。不同的則是它們的實(shí)現(xiàn)方法及其原因。
并行(Parallel),或曰并行代碼,或曰并行系統(tǒng)都是討論有關(guān)如何使用現(xiàn)有系統(tǒng),通過任務(wù)分片(breaking into pieces)技術(shù)使得所有的任務(wù)都可以同時(shí)運(yùn)行,以期提高運(yùn)行速度。所以假設(shè)你要執(zhí)行某項(xiàng)復(fù)雜的任務(wù):將執(zhí)行A,B和C三個(gè)過程。A和B為C的運(yùn)行分別進(jìn)行準(zhǔn)備,但是A,B之間不會(huì)相互干預(yù)。現(xiàn)在你可以先執(zhí)行A,直到它執(zhí)行完畢,然后執(zhí)行B,等待B執(zhí)行完畢,然后再去執(zhí)行C。或者你有多余的CPU,你可以同時(shí)執(zhí)行A和B,當(dāng)它們執(zhí)行完畢以后,執(zhí)行C。當(dāng)你編寫一個(gè)在同一時(shí)間內(nèi)運(yùn)行多個(gè)程序片段以達(dá)到提升運(yùn)行速度的程序時(shí),你所做的就是并行。
并發(fā)(Concurrency)討論關(guān)于系統(tǒng)存在多個(gè)子部分,其中每個(gè)部分設(shè)計(jì)的明確目的是為能夠響應(yīng)在同一時(shí)間內(nèi)發(fā)生的事件,并不是為了提高運(yùn)行速度,但卻是系統(tǒng)功能不可或缺的一部分。科技博客(ScienceBlogs)的服務(wù)器端系統(tǒng)(The backend system)處理著大量的并發(fā),因?yàn)樗辉O(shè)計(jì)為能支持成千上萬的訪問者同時(shí)閱讀網(wǎng)頁內(nèi)容,也允許我們同時(shí)撰寫和發(fā)布新文章而不會(huì)影響服務(wù)器系統(tǒng)的正常運(yùn)行。如果對于系統(tǒng)來說在同一時(shí)間內(nèi)支持大量事件同時(shí)發(fā)生是必須的功能,它所做的就是并發(fā)。
分布(Distribution)討論關(guān)于由多個(gè)物理設(shè)備通過網(wǎng)絡(luò)連接組成的系統(tǒng)。
它是一項(xiàng)基礎(chǔ)性研究,目的在于研究如何組織構(gòu)建依據(jù)需要拆分后位于各個(gè)不同實(shí)際位置,不同通信限定條件物理設(shè)備的系統(tǒng)。如果你有一個(gè)特別設(shè)計(jì)來在大量不同的物理硬件上同時(shí)運(yùn)行各自程序的系統(tǒng),但是它們某些情況下也是單獨(dú)的系統(tǒng),這就是分布式系統(tǒng)。
分別舉例:
1.天氣預(yù)報(bào)軟件系統(tǒng)通常就是并行結(jié)構(gòu)。通過對流體力學(xué)等的大量運(yùn)算結(jié)果,得到精確的天氣預(yù)測結(jié)果需要海量的運(yùn)算量。將這些運(yùn)算工作分發(fā)給大量CPU去執(zhí)行,可以滿足甚至高于基本的工作效率。
2.數(shù)據(jù)庫系統(tǒng)通常被構(gòu)建為并發(fā)結(jié)構(gòu)。糾其原因是存在大量的數(shù)據(jù)并且大量連續(xù)的查詢請求。當(dāng)一個(gè)用戶開始一個(gè)查詢時(shí),系統(tǒng)不會(huì)停下來進(jìn)行某些操作直到該查詢結(jié)束。而是允許大量的用戶在同一時(shí)刻進(jìn)行查詢。大多數(shù)的數(shù)據(jù)庫甚至保證如果一個(gè)用戶正在執(zhí)行更新操作,其他的用戶仍然可以在更新未處理過程中執(zhí)行并行查詢,查詢總是返回一個(gè)數(shù)據(jù)庫更新前或者更新后一致的結(jié)果,絕不會(huì)返回兩個(gè)結(jié)果。
3.分布式系統(tǒng)的例子類似writely(google提供的一個(gè)文檔在線編輯,共享的web服務(wù))這樣的軟件。它運(yùn)行于網(wǎng)頁瀏覽器中,使用writely你能夠在瀏覽器中對文檔進(jìn)行編輯,并且可以與其他人共享的方式進(jìn)行編輯,這樣一來你可以擁有三個(gè)或者四個(gè)瀏覽器同時(shí)對文檔進(jìn)行編輯。就本系統(tǒng)而言每個(gè)瀏覽器運(yùn)行自己的java應(yīng)用程序來與服務(wù)器進(jìn)行交互,并通過消息機(jī)制相互通信;它們沒有任何修改文本操作的實(shí)際代碼。服務(wù)器也沒有任何關(guān)于類似繪制客戶端界面的代碼,服務(wù)器只負(fù)責(zé)與客戶端通信,接收并處理來自客戶端的編輯命令,并將更新信息送回,這樣所有的用戶界面都顯示相同的內(nèi)容。整個(gè)系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)思路圍繞著這樣的思想,這些不同的子系統(tǒng)都獨(dú)立的運(yùn)行在不同的機(jī)器之上。