云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

一张图读懂并发/并行/异步的区别

jxf315 2025-04-24 01:58:59 教程文章 24 ℃
Erlang 编程语言的设计者 Joe Armstrong 曾经画过一张图,用来解释 Concurrency(并发)和 Parallelism(并行)的区别。

这张图很形象,我觉得它也可以用来解释这句话:Asynchrony(异步)和 Concurrency(并发)没有什么关系。
  • 并发(单个咖啡店,多个队列):服务员在多个队列之间轮流服务,尽管不能同时为所有队列服务,但通过快速切换,能有效管理多个任务。

  • 并行(多个咖啡店,各自队列):每个咖啡店有自己的服务员,能同时为各自队列的客人服务,实现真正的同时处理多个任务。

  • 异步(客人点单后可做其他事):客人点单后不必等待,而是可以做其他事情,比如阅读报纸或查看手机,当咖啡准备好后,服务员会通知你,你可以过来取咖啡。这种方式允许客人在等待期间最大限度地利用自己的时间。

并发主要关注于任务的管理和调度。在并发环境中,可以同时处理多个任务,不论是通过时间片轮转在单核处理器上,还是在多核处理器上。

异步主要关注于提高程序在等待(通常是 I/O 操作)期间的效率。异步允许程序在等待一个操作完成的同时继续执行其他代码,从而避免阻塞。

异步编程本质上与并发(多任务同时进行)无关,而是关注于单个任务在等待时的处理方式。


WWH 系列文章列表:

[1] Why - 为什么 JS 更像一门编译型语言?

[2] What - 什么是依赖注入?

[3] What - 如何清晰地理解算法复杂度 Big O?

[4] How - 不同的语言都如何处理错误?

[5] How - 面向对象语言如何处理异常?

[6] Why - 为什么排序算法复杂度上限是 O(NlogN)?

最近文章列表:

[1] C++异常处理的底层机制

[2] .git 目录里到底包含了什么?

[3] 看图聊算法:一个游戏让你理解二分法的本质

[4] 看图聊算法:还是一个游戏,让你理解三分法的本质

[5] 看图聊算法:为什么插入排序效率不高,却是使用频率最高的排序算法

[6] 看图聊算法:归并排序一个被教科书嫌弃的算法,我们为什么还要学

[7] 看图聊算法:冯·诺依曼的第一个计算机程序是怎么做出来的?

[8] 看图聊算法:快速排序为什么快?

[9] 不刷题,不面试,来看看算法学习在编程世界中的真正价值

[10] 看图聊算法:堆排序,我们学习它可能并不是为了排序

[11] 看图聊算法:为什么快速排序不够快?

[12] 看图聊算法:为什么堆排序不够快?

[13] 一张图读懂异步编程模型是如何运作的



最近发表
标签列表