以下內容轉自http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html(使用谷歌翻譯):
術語並發和並行性通常用於多線程程序。但是,並發和並行性究竟是什么意思呢,它們是相同的術語還是什么?
簡短的答案是“不”。它們不是相同的術語,盡管它們在表面上看起來非常相似。也花了我一些時間來終於找到並了解並發和並行性之間的區別。因此,我決定在這個Java並發教程中添加一個關於並發性與並行性的文本。
並發
並發意味着應用程序同時在多個任務上同時進行。那么如果計算機只有一個CPU,應用程序可能不會在同一時間在多個任務上進行進展 ,但是在應用程序內一次處理多個任務。在下一個開始之前,它不完全完成一項任務。
並行
並行性意味着應用程序將其任務分解成更小的子任務,可以並行處理,例如在多個CPU上同時進行處理。
並發性與並行性細節
正如你所看到的,並發性與應用程序如何處理它所處理的多個任務有關。應用程序可以在時間(順序)處理一個任務或同時處理多個任務(並發)。
另一方面,並行性與應用程序如何處理每個單獨的任務有關。應用程序可以從頭到尾連續地處理任務,或將任務分解成可以並行完成的子任務。
你可以看到,應用程序可以是並發的,但不是並行的。這意味着它同時處理多個任務,但任務不會分解為子任務。
應用程序也可以是並行的,但不是並發的。這意味着應用程序一次只能在一個任務上工作,並且該任務被分解成可並行處理的子任務。
另外,應用程序既可以並發也不能並行。這意味着它一次只能執行一個任務,並且任務不會被分解為並行執行的子任務。
最后,一個應用程序也可以並發和並行,因為它同時在多個任務上工作,並且還將每個任務分解成子任務並行執行。但是,在這種情況下,並發和並行性的一些好處可能會丟失,因為計算機中的CPU已經保持合並繁忙,並發或並行性。結合它可能只會導致小的性能增益甚至性能損失。在盲目采用並行並行模型之前,請確保分析和測量。