在大多数技术文章、教程甚至招聘 JD 里,“并发(Concurrency)”和“并行(Parallelism)”这两个词几乎被完全混用,比如说async/await 叫并发,多线程叫并行,Go 协程叫并发,异步叫并发,但实际上在计算机底层对两者有着严格的分类,但是这两者其实是相辅相成的,我们首先回顾一下这两者的概念。
并发 & 并行的定义
并发计算
我们来看看wiki的定义:
并发计算,简单来说,就是将一个计算任务,分割成几个小的部分,让它们同时被计算,之后再汇整计算结果,以完成任务。它跟并行计算(Parallel computing)与分布式计算,有重叠之处,在概念上不同,但常会让人混淆。 并发计算是一种程序运算的特性,可以被视为是并行运算的进一步抽象,它包涵了时间片这种可以被用来实现虚拟并行运算(pseudoparallelism)的技术,因此在实际的物理运作中,计算过程可能是并行,或非并行的。