鏈接:Basics: Parallel, Concurrent, and Distributed
原文作者:Mark C.Chu-Carroll
本文的誕生也不過得源于在我曾經開始談論關于π演算 (π-calculus)時的帖子中所提出的問題,但是我認為這的確是有趣到足以置頂的帖子。如果聽見某人談論關于計算機和軟件時,有三個詞常常會出現在你的耳邊:并行(parallel),并發(concurrent)和分布(distributed).乍一聽,它們似乎指代的是同一類事物,但是實際上,它們是三類不同的事物,它們之間的差異舉足輕重。
它們近似相通的地方是,都是描述計算機硬件和軟件組成的系統體系結構,以達到同一時間處理多項任務的目的。不同的則是它們的實現方法及其原因。

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