并发[concurrency]和并行[parallelism]是两个相关但是不完全相同的概念。

并发是指一个系统可以同时执行两个及以上的动作,但是这里的同时可能是指在一个时间段内完成,并不要求同时开始同时结束,所以Concurrency不会有Overlap。所以并发的一个典型例子就是时间片轮转,将一段完整时间分割成多份,然后用一定的方法分配给不同的动作来执行。并发操作的设计会考虑很多执行顺序以便实现预期效果。

并行也是指一个系统可以同时执行两个及以上的动作,但是这里的同时一般是指同时开始,而且多数情况下,同时执行的动作并不互相干扰,所以Parallelism会有Overlap。并行的一个典型例子就是多核多进程执行,每个进程可以单独执行一个程序。

Concurrency vs Parallelism (PE = Processing Element)

Reference:

Figure from “An Introduction to Concurrency in Programming Languages” by J. Sottile, Timothy G. Mattson, and Craig E Rasmussen, 2010