? ? ? ?本系列譯自jakob jenkov的Java并發(fā)多線程教程,個人覺得很有收獲。由于個人水平有限,不對之處還望矯正!
? ? ? ? 在多線程線程編程中,我們經常提及并發(fā)和并行,但是并發(fā)和并行究竟是什么意思,他們所要表達是同一回事,還是不是同一加事。
? ? ? ?它們當然不是一回事,雖然表面上它們看起來非常的相似,但是它們是兩個不相同的術語。在此之前,我也花費了大量的時間去了解并發(fā)與并行的區(qū)別,因此我覺得在這里對比一下兩者。
并發(fā)
? ? ? ? 并發(fā)意味著一個應用在同一時刻處理多個任務。如果計算機只有一個CPU,那么應用程序不可能在同一時刻處理多個任務,但在應用內部,會有多個任務被處理,也就是說一個任務還沒有結束的時候另一個任務已經開始被處理。

并行
? ? ? ? ?并行意味著應用將任務劃分成多個小的子任務,去并行的執(zhí)行。

并發(fā)與并行詳細對比
? ? ? ? 正如你所看到的一樣。并發(fā)與應用程序如何處理多任務有關,應用程序可以在同一時刻處理一個任務(順序),也有可能在同一時刻處理多個任務(并發(fā))。并行,換句話來說就是,它與應用程序如何處理每個單獨的任務有關。應用程序可以從開始到結束連續(xù)處理,或是將任務劃分解成多個可以并行運行的子任務。如你所看到的,有些應用程序可以是并發(fā)但不是并行的,這就是說同一時刻可以處理多個任務,而這些任務不會分解成多個子任務。應用程序可以是并行的但不是并發(fā)的,這就是說同一時刻只有一個任務在執(zhí)行,任務被分解成多個子任務并行執(zhí)行。除此,一個應用程序可以既不是并行的,也不不并發(fā)的,這就是說,同一時刻只有一個任務執(zhí)行,而且這個任務絕對不會拆解成多個子任務去并行執(zhí)行。最后,一個應用程序可以是并行的也可以是并發(fā)的,這就是說同一時刻可以有多個任務并發(fā)執(zhí)行,同時每個任務又可以拆解成多個子任務并行的去執(zhí)行。然而,在這種情況下,并發(fā)和并行的優(yōu)點可能不復存在,因為計算機中CPU已經很繁忙的去處理并發(fā)和并行,他們二者的結合可能只會產生較小的性能提升或者甚至降低。因此在選擇并發(fā)并行模型時,請確保你的分析和度量。