鏈接:Basics: Parallel, Concurrent, and Distributed
原文作者:Mark C.Chu-Carroll
本文的誕生也不過得源于在我曾經(jīng)開始談?wù)撽P(guān)于π演算 (π-calculus)時的帖子中所提出的問題,但是我認(rèn)為這的確是有趣到足以置頂?shù)奶印H绻犚娔橙苏務(wù)撽P(guān)于計算機(jī)和軟件時,有三個詞常常會出現(xiàn)在你的耳邊:并行(parallel),并發(fā)(concurrent)和分布(distributed).乍一聽,它們似乎指代的是同一類事物,但是實際上,它們是三類不同的事物,它們之間的差異舉足輕重。
它們近似相通的地方是,都是描述計算機(jī)硬件和軟件組成的系統(tǒng)體系結(jié)構(gòu),以達(dá)到同一時間處理多項任務(wù)的目的。不同的則是它們的實現(xiàn)方法及其原因。

并行(Parallel),或曰并行代碼,或曰并行系統(tǒng)都是討論有關(guān)如何使用現(xiàn)有系統(tǒng),通過任務(wù)分片(breaking into pieces)技術(shù)使得所有的任務(wù)都可以同時運(yùn)行,以期提高運(yùn)行速度。所以假設(shè)你要執(zhí)行某項復(fù)雜的任務(wù):將執(zhí)行A,B和C三個過程。A和B為C的運(yùn)行分別進(jìn)行準(zhǔn)備,但是A,B之間不會相互干預(yù)。現(xiàn)在你可以先執(zhí)行A,直到它執(zhí)行完畢,然后執(zhí)行B,等待B執(zhí)行完畢,然后再去執(zhí)行C。或者你有多余的CPU,你可以同時執(zhí)行A和B,當(dāng)它們執(zhí)行完畢以后,執(zhí)行C。當(dāng)你編寫一個在同一時間內(nèi)運(yùn)行多個程序片段以達(dá)到提升運(yùn)行速度的程序時,你所做的就是并行。
并發(fā)(Concurrency)討論關(guān)于系統(tǒng)存在多個子部分,其中每個部分設(shè)計的明確目的是為能夠響應(yīng)在同一時間內(nèi)發(fā)生的事件,并不是為了提高運(yùn)行速度,但卻是系統(tǒng)功能不可或缺的一部分。科技博客(ScienceBlogs)的服務(wù)器端系統(tǒng)(The backend system)處理著大量的并發(fā),因為它被設(shè)計為能支持成千上萬的訪問者同時閱讀網(wǎng)頁內(nèi)容,也允許我們同時撰寫和發(fā)布新文章而不會影響服務(wù)器系統(tǒng)的正常運(yùn)行。如果對于系統(tǒng)來說在同一時間內(nèi)支持大量事件同時發(fā)生是必須的功能,它所做的就是并發(fā)。
分布(Distribution)討論關(guān)于由多個物理設(shè)備通過網(wǎng)絡(luò)連接組成的系統(tǒng)。
它是一項基礎(chǔ)性研究,目的在于研究如何組織構(gòu)建依據(jù)需要拆分后位于各個不同實際位置,不同通信限定條件物理設(shè)備的系統(tǒng)。如果你有一個特別設(shè)計來在大量不同的物理硬件上同時運(yùn)行各自程序的系統(tǒng),但是它們某些情況下也是單獨(dú)的系統(tǒng),這就是分布式系統(tǒng)。
分別舉例:
1.天氣預(yù)報軟件系統(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)一個用戶開始一個查詢時,系統(tǒng)不會停下來進(jìn)行某些操作直到該查詢結(jié)束。而是允許大量的用戶在同一時刻進(jìn)行查詢。大多數(shù)的數(shù)據(jù)庫甚至保證如果一個用戶正在執(zhí)行更新操作,其他的用戶仍然可以在更新未處理過程中執(zhí)行并行查詢,查詢總是返回一個數(shù)據(jù)庫更新前或者更新后一致的結(jié)果,絕不會返回兩個結(jié)果。
3.分布式系統(tǒng)的例子類似writely(google提供的一個文檔在線編輯,共享的web服務(wù))這樣的軟件。它運(yùn)行于網(wǎng)頁瀏覽器中,使用writely你能夠在瀏覽器中對文檔進(jìn)行編輯,并且可以與其他人共享的方式進(jìn)行編輯,這樣一來你可以擁有三個或者四個瀏覽器同時對文檔進(jìn)行編輯。就本系統(tǒng)而言每個瀏覽器運(yùn)行自己的java應(yīng)用程序來與服務(wù)器進(jìn)行交互,并通過消息機(jī)制相互通信;它們沒有任何修改文本操作的實際代碼。服務(wù)器也沒有任何關(guān)于類似繪制客戶端界面的代碼,服務(wù)器只負(fù)責(zé)與客戶端通信,接收并處理來自客戶端的編輯命令,并將更新信息送回,這樣所有的用戶界面都顯示相同的內(nèi)容。整個系統(tǒng)的設(shè)計實現(xiàn)思路圍繞著這樣的思想,這些不同的子系統(tǒng)都獨(dú)立的運(yùn)行在不同的機(jī)器之上。