并发与并行

并行

并行就是指同一时刻有两个或两个以上的 “工作单位” 在同时执行,从硬件的角度上来看就是同一时刻有两条或两条以上的指令处于执行阶段。

所以,多核是并行的前提,单线程永远无法达到并行状态。可以利用多线程和度进程到达并行状态。另外的,Python的多线程由于GIL的存在,对于Python来说无法通过多线程到达并行状态。

并发

对于并发的理解,要从两方面去理解:

  1. 并发设计
  2. 并发执行。

先说并发设计,当说一个程序是并发的,更多的是指这个程序采取了并发设计。

并发设计的标准:使多个操作可以在重叠的时间段内进行 ,这里的重点在于重叠的时间内, 重叠时间可以理解为一段时间内。

例如:在时间 1s 秒内,具有 IO 操作的 task1 和 task2 都完成,这就可以说是并发执行。所以呢,单线程也是可以做到并发运行的。当然啦,并行肯定是并发的。

一个程序能否并发执行,取决于设计,也取决于部署方式。例如,当给程序开一个线程(协程是不开的),它不可能是并发的,因为在重叠时间内根本就没有两个 task 在运行。当一个程序被设计成完成一个任务再去完成下一个任务的时候,即便部署是多线程多协程的也是无法达到并发运行的。

并发与并行总结

并行就是指同一时刻有两个或两个以上的 “工作单位” 在同时执行,从硬件的角度上来看就是同一时刻有两条或两条以上的指令处于执行阶段。

并行与并发的关系:并发的设计使到并发执行成为可能,而并行是并发执行的其中一种模式。