并发并行是学习多线程编程的过程中经常遇到的两个名词. 这两个词字面上仅有一字之差, 很多人会把它们看作相同的概念, 但实际上二者存在明显的差别.

定义

并行: 一组程序按独立异步的速度执行, 无论从微观还是宏观, 程序都是一起执行的. 对比地, 并发是指: 在同一个时间段内, 两个或多个程序执行, 有时间上的重叠(宏观上是同时, 微观上仍是顺序执行).*

并发: 在操作系统中, 是指一个时间段中有几个程序都处于已启动运行到运行完毕之间, 且这几个程序都是在同一个处理机上运行, 但任一个时刻点上只有一个程序在处理机上运行.**

* **引用百度百科

简言之, 并行是指在同一时间点上, 有若干个任务同时处于运行状态; 而并发则是指同一时间段内, 有若干个任务运行, 但每个时间点上只有一个任务在运行(宏观上同时执行, 微观上顺序执行).

二者在宏观上都是同时执行任务, 但微观上只有并行是真正的同时进行, 而并发不是.

解释

首先解释并行.

| –A不执行– | ———-A执行———– | —A不执行– |

| —–B不执行—- | —————-B执行—————- |

| 开始 ———— | ———-C——— | ———– 结束 |

例如像上面这样, 有A, B两个任务, 它们都有 “执行” 和 “不执行” 两种状态. 可以看到, 在整个过程中的C时间段内, AB两个任务都在执行, 而其他时间段内不是没有任务执行, 就是只有一个任务执行. 这时候, 我们就说C时间段内AB并行执行.

然后解释并发.

| ———-A执行———- | ———A不执行——– |

| ———-B不执行———— | ——-B执行——– |

| 开始 ——————————————- 结束 |

显而易见, 在上面的例子中, 整个过程中有AB两个任务被执行. 但在每个时间点上, 只有这两种情况: 没有任务执行或有且仅有一个任务执行. 宏观上, AB在这段时间里就和并行一样, 都被执行了, 但微观上并不存在两个任务同时执行的时间点. 这时候, 我们就说这个过程中AB是并发执行的.

总结

总言之: 并行就是宏观同时, 微观亦同时; 并发就是宏观同时, 微观按顺序.

二者在宏观上都是同时执行任务, 但微观上只有并行是真正的同时进行, 而并发不是.

 Save as PDF
最后修改日期: 2022-06-04

作者

留言

撰写回覆或留言