理解并发(Concurrency)和并行(Parallelism)

Ref

https://www.zhihu.com/question/33515481

https://blog.csdn.net/java_zero2one/article/details/51477791

综述

 

并发的关键是你有没有处理多任务的能力,不一定要同时。并行的关键是你有没有同时处理多个任务的能力。

在并发程序中可以同时拥有两个或者多个线程。这意味着,如果程序在单核处理器上运行,那么这两个线程将交替地换入或者换出内存。这些线程是同时“存在”的——每个线程都处于执行过程中的某个状态(new,ready,running,blocked,dead)。

如果程序能够并行执行,那么就一定是运行在多核处理器上。此时,程序中的每个线程都将分配到一个独立的处理器核上,因此可以同时运行

并发指的是代码的性质,并行指的是物理运行状态。

Concurrent并发

同时存在,不一定同时运行。例如两条队列交替使用同一个咖啡机。如图所示,并发即多个线程交替使用cpu时间片运行。

 

Parallel 并行

同时运行,例如两条队列使用两台咖啡机。线程同时运行在多核处理器的不同核上。

 

用图理解

 

Erlang 之父 Joe Armstrong

视频

Ref

https://v.youku.com/v_show/id_XNzA4MzU5MTM2.html?from=s1.8-1-1.2&spm=a2h0k.8191407.0.0

"Concurrency+Is+Not+Parallelism" by Rob+Pike

Concurrency is about dealing a lot of things at once.

Parallelism is about doing a lot of things at once.

文章

ref

https://www.cnblogs.com/concurrency/p/3925951.html

原文地址:https://www.cnblogs.com/leejunwei/p/concurrentandparrallel.html