并发和并行的区别

关于并发和并行的区别,引用一个经典的描述:

并发是同一时间应对(dealing with)多件事情的能力。 并行是同一时间动手(doing)做多件事情的能力。

雨痕老师《Go 语言学习笔记》上的解释:

并发是指逻辑上具备同时处理多个任务的能力;并行则是物理上同时执行多个任务。

而根据《Concurrency in Go》这本书,计算机的概念都是抽象的结果,并发和并行也不例外。它这样描述并发和并行的区别:

Concurrency is a property of the code; parallelism is a property of the running program.

并发是代码的特性,并行是正在运行的程序的特性。先忽略我拙劣的翻译。很新奇,不是吗?我也是第一次见到这样的说法,细想一下,还是很有道理的。

我们一直说写的代码是并发的或者是并行的,但是我们能提供什么保证吗?如果在只有一个核的机器上跑并行的代码,它还能并行吗?你就是再天才,也无法写出并行的程序。充其量也就是代码上看起来“并发”的,如此而已。

当然,表面上看起来还是并行的,但那不过 CPU 的障眼法,多个线程在分时共享 CPU 的资源,在一个粗糙的时间隔里看起来就是“并行”。

所以,我们实际上只能编写“并发”的代码,而不能编写“并行”的代码,而且只是希望并发的代码能够并行地执行。并发的代码能否并行,取决于抽象的层级:代码里的并发原语、runtime,操作系统(虚拟机、容器)。层级越来越底层,要求也越来越高。因此,我们谈并发或并行实际上要指定上下文,也就是抽象的层级。


https://zhuanlan.zhihu.com/p/74613114

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • OK,如果你还在为并发(concurrency)和并行(parallelism)这两个词的区别而感到困扰,那么这篇...
    __RY__阅读 1,744评论 0 0
  • 并发(concurrency)和并行(parallellism)是: 解释一:并行是指两个或者多个事件在同一时刻发...
    杰哥长得帅阅读 111,439评论 15 55
  • 并发(concurrent)与并行(parallel)是两个既相似而又不相同的概念。我们先来看一下英文的解释。 C...
    洛的俠阅读 443评论 0 0
  • 简书停更 本人主要在头条号写文章,可以关注我的头条号【happyjava】,或者收藏我的个人博客happy的博客b...
    哈皮呀阅读 1,296评论 0 0
  • 如果某个系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统。如果某个系统支持两个或者多...
    潭潭_180阅读 1,281评论 0 0