Loading AI tools
来自维基百科,自由的百科全书
並發計算(英語:Concurrent computing,或譯為並行處理、共時計算),是一種程式計算的形式,在系統中,至少有兩個以上的計算在同時運作,計算結果可能同時發生。用來實作並行系統(Concurrent system)的程式語言與各種演算法,統稱為並行計算。
並行程式通常被設計為互動式的運算過程,因為它的運算過程是不確定的,在設計上的難度較高。設計並行程式最大的挑戰,在於確保不同運算執行步驟間的互動或是通訊,能以正確的順序進行,同時,也要確保在不同執行步驟間共享的資源,能夠正確被存取。在這個領域的先驅人物有艾茲赫爾·戴克斯特拉、東尼·霍爾與泊·派克·漢森等人。
並行計算,簡單來說,就是將一個計算任務,分割成幾個小的部份,讓它們同時被計算,之後再匯整計算結果,以完成任務。它跟平行計算(Parallel computing)與分散式計算,有重疊之處,在概念上不同,但常會讓人混淆。
並行計算是一種程式運算的特性,可以被視為是平行運算的進一步抽象,它包涵了時間片這種可以被用來實作虛擬平行運算(pseudoparallelism)的技術,因此在實際的物理運作中,計算過程可能是平行,或非平行的。
平行計算是指,當並行計算的程式,在機器平台上同時被執行的狀況,因此,平行計算是一種機器運算的形式之一。分散式計算(Distributed computing)則是平行計算的一個特例,它採用計算機網路來進行同步。
實作並行程式有許多方式,依程式語言與作業系統的支援,可以用行程,或是執行緒來實作。它可以執行在單一處理器上,將不同的執行步驟分散在不同時間片中執行,以非平行方式循序運算;它也可以用平行計算來實現,將每個行程指定給處理器組中的某個處理器,以單晶片多處理器平台,或是透過網路連結的分散平台來實做。
依照硬體與作業系統的支援,並行計算可以在同一個行程中完成,在同一個行程中以多執行緒來完成,以多個行程來達成,甚至可以分成數個程式來執行。可以用單處理器的循序計算來實作,也可以採平行計算或分散式計算方式實做。
但以平行方式來運作並行程式,並不必然會增進執行效率。因為執行結果可能會因為平台特性而改變,也增加它在設計上的難度。
並行計算中,不同計算單元之間,需要進行通訊以保持同步。這些通訊方式,在某些並行程式語言中,是被隱藏起來的(例如,利用future方式)。以外顯方式來進行通訊,可分成兩種主要方式:
並發性編程語言使用編程語言結構特性進行並發。這些結構涉及到多線程,分布式計算,消息傳遞,資源共享(包括內存共享)。有時候我們也稱這些語言是面向並發的編程語言(COPL)。 如今很多常用的語言都擁有並發的特性,例如:Java和C#。這兩種語言底層都是通過內存共享以及鎖監聽機制的並發模型來實現(儘管消息傳遞模型如今也是基於內存共享模型實現的)。在消息傳遞的並發模型世界中,Erlang最具代表性並被廣泛使用至今。
很多並發性編程語言更多的是被用作研究(例如:Pict)而非生產用途。儘管如此,在最近20年,還是有很多語言例如 Erlang,Limbo和Occam被用於生產工業。類似這些並發性編程語言還包括:
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.