併發、並行與分散式程式設計的概念區分
併發與並行
併發是兩個任務可以在重疊的時間段內啟動,執行和完成;並行是任務在同一時間執行,例如,在多核處理器上。
併發是獨立執行過程的組合,而並行是同時執行(可能相關的)計算。
併發是一次處理很多事情,並行是同時做很多事情。
應用程式可以是併發的,但不是並行的,這意味著它可以同時處理多個任務,但是沒有兩個任務在同一時刻執行。
應用程式可以是並行的,但不是併發的,這意味著它同時處理多核CPU中的任務的多個子任務。
應用程式可以即不是並行的,也不是併發的,這意味著它一次一個地處理所有任務。
應用程式可以即是並行的也是併發的,這意味著它同時在多核CPU中同時處理多個任務。
綜上總結,可以看出,並行要比並發更難得,對於單CPU來說,除了指令級別的並行,其他情況並不能實行精確的並行。
併發的意義
1.有時併發確實能在同一時間間隔內完成更多的任務,也就是有利於增加任務的吞吐量。因為在單CPU的情況下,並不是所有的任務在進行的每時每刻都使用CPU,也許還要使用IO等裝置。而在多CPU或者多臺計算機組成的叢集的情況下,就更不用說了。
2.併發有利於簡化程式解決方案。有時把問題的解決方案看作一組併發執行的任務更合理。這是模擬現實場景的自然方式。
3.有時對於效能而言速度處於次要地位,採用併發性是為了使軟體在相同的時間間隔內做更多的工作。比如一個網站支援多少個使用者同時訪問。
4.最後,採用併發性可以簡化軟體,通常一系列較短的併發執行操作比一個較長的複雜的順序操作更容易實現。併發使軟體執行速度更快,處理更多的負載或簡化程式的設計方案,其主要目標是軟體優化,即採用併發性使軟體效能更佳。
併發與分散式程式設計
並行和分散式程式設計是兩種不同的、有時又相互交叉的程式設計範例。
並行程式設計技術將程式必須處理的作業分配給一個物理或虛擬計算機內的兩個或者多個處理器;而分散式程式設計技術則一般是將作業分配給叢集內的不同計算機的一個或者多個處理器。從這個角度講,分散式程式設計的範圍要比並行程式設計範圍更大。
並行程式可以分成程序或者執行緒實現;分散式程式僅能分成程序實現。
在技術上,並行程式有時候是分散式的,例如PVM程式設計;分散式程式設計有時用於實現並行性,例如MPI程式設計。 但並非所有的分散式程式都包括並行性,分散式程式的各部分可以在不同時間間隔內的不同時刻執行。
在純粹的並行程式中,併發執行部分都是同一個程式中的部分; 在分散式程式中,併發執行的部分通常實現成分離的程式。