news 2026/4/2 17:15:46

并发,并行与异步

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
并发,并行与异步

我发现一个普遍的困惑点浮现出来,其根源在于混淆了“并发”、“并行”与“异步”,特别是下意识地将异步等同于利用多核CPU进行并行处理。

为了彻底澄清这些基础但至关重要的概念,我们深入剖析理论原则并且同时抛开我们日常使用的现代框架(如.NET)中的具体实现(这往往会误导),以辨析并发(Concurrency)、并行(parallel)和异步(Asynchronous)这三个核心概念。

核心概念解析

什么是并发(Concurrency)?

  • 定义: 并发是指一个系统有能力在一段时间内处理多个任务。这些任务的执行在宏观上是重叠的,但在微观上是通过任务的交替执行实现的。

  • 精髓: Go语言之父 Rob Pike 对此有非常精辟的论述:“Concurrency is about dealing with lots of things at once.”(并发是关于处理多件事情的能力)。这里的关键词是“dealing with”(处理),它强调的是一种程序结构,使其能够应对和管理多个任务流。

  • 举例说明: 一个餐厅突然来了三个客人,但餐厅只有一个服务员。从服务员的角度来看,他需要同时服务这些客人。当然这是宏观上的同时,因为服务员执行事件的速度是在是太慢了。

什么是并行(parallel)?

  • 定义: 并行是指系统能够在同一物理时刻真正地同时执行多个任务。

  • 前提: 并行必须依赖于多核CPU。在多核处理器上,每个核心可以在完全相同的时刻独立地执行一个不同的任务指令,实现物理意义上的“同时”。

  • 精髓: 同样引用 Rob Pike 的论述进行对比:“parallel is about doing lots of things at once.”(并行是关于完成多件事情的能力)。这里的关键词是“doing”(完成),强调的是物理上的同时执行,是真正意义上的“一起做”。

  • 举例: 还是餐厅的例子,一个餐厅突然来了三个客人,餐厅这次有3个服务员,每个服务员正好服务一位客人。这就是并行。

什么是异步(Asynchronous)?

  • 定义: 异步是一种编程模型或模式,其核心思想是非阻塞(Non-blocking)。它描述的是一种调用行为,尤其在处理耗时的I/O操作时(如网络请求、数据库查询、文件读写)显得至关重要。

  • 机制: 当一个线程发起一个异步I/O操作时(例如,在.NET中调用 await client.GetStringAsync(...)),它并不会原地阻塞等待。实际发生的过程是:

  1. 该线程向操作系统发出I/O请求,然后立即返回。

  2. 这个宝贵的线程被释放回线程池,可以立即去处理其他的工作,比如响应另一个用户的请求。CPU完全没有被闲置。

  3. I/O操作由硬件(如网卡、磁盘控制器)独立完成。

  4. 当操作完成后,硬件会向CPU发送一个中断信号。

  5. 操作系统捕获这个中断,并将一个完成事件排入队列。

  6. 线程池中的某个可用线程会取出这个事件,并从之前 await 的地方继续执行后续代码。

  • 目的: 异步的主要目标是避免在等待I/O密集型操作时浪费昂贵的线程资源,从而用少量的线程实现极高的系统吞吐量和可伸缩性(例如,处理成千上万的并发网络连接)。它关注的是调用方的线程是否被阻塞,而非任务是否在多核上同时运行。

  • 误区澄清: “Asynchronous is not Concurrency.”(异步不是并发)。这是一个极其重要的区分。异步是一种允许代码以非线性(多任务角度)顺序正确执行的属性,它能够用来实现并发,但其本身并非并发。异步可以在单线程上实现(一个线程发起请求后去做别的事),而并行则必须是多个线程在多个CPU核心上同时执行。

  • 举例: 还是餐厅的例子,一个餐厅同时来了三个客人,三个服务员每人一个客人。服务员在下完单后有两个选择:

  1. 同步:在后厨门口傻等,直到出餐后送到客人桌上。

  2. 异步:下单后马上去接待其他客人或者处理其他事情,等后厨对讲机里通知菜烧好了才去取餐送餐。

!!!这里请大家注意 !!!:

异步模型我们强调的是这个服务员被释放出来了,他更加灵活的调度,他可以做更多的事来提高餐厅的运行效率。至于后厨做菜这件事是一个厨师来做,还是十个厨师来做那是如何更快的做菜的问题。这跟异步还是同步没有关系。同步模式下做菜这件事也可以请十个厨师来做而加快出餐的速度。

三者的关系与区别

为了更直观地理解它们,我们可以通过一个表格来对比:

总结

总而言之,并发、并行和异步是从不同维度描述任务执行方式的概念。并发是一种程序设计结构,使其能够逻辑上处理多个任务;并行是利用硬件(多核CPU)在物理上同时执行多个任务的计算能力;而异步是一种编程范式,通过非阻塞IO调用来极致地提高系统资源的利用率。

文章转载自:Agile.Zhou

原文链接:https://www.cnblogs.com/kklldog/p/19474533

体验地址:http://www.jnpfsoft.com/?from=001YH

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/11 16:24:00

磁条卡的详细介绍以及读写方法

下面是关于磁条卡的详细介绍以及读写方法的全面指南。 第一部分:磁条卡详细介绍 磁条卡是一种在塑料卡片背面附着有磁性条纹的存储介质,通过磁化粒子来记录数据。它曾是银行卡、信用卡、门禁卡、会员卡等最主流的载体,如今正逐渐被更安全的芯片卡取代。 1. 物理结构 磁条…

作者头像 李华
网站建设 2026/4/3 2:46:35

YOLOv11主干网络创新:基于反向传播优化的EMO架构实践详解

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有!@[TOC] 好的,我们来深入解析这篇关于YOLOv11主干网络改进的技术博客内容,并以此为基础,为你构建一个详尽的研究型教程。博客的核心是介绍一种名为“反向传播增强E…

作者头像 李华
网站建设 2026/3/28 0:15:11

5 个提升投稿成功率88%的关键写作技巧,审稿人真的很吃这一套!

为什么咱们每次投的稿都石沉大海?要不然就是打回重改,改了好几遍还是发不出去...撇去那些语言、格式、拼写、语法这些小问题,审稿人实际上也有自己的一套专属论文模板。下面我就给大家分享提升投稿成功率88%的关键写作技巧,实测审稿人真的很吃这一套! 一、结构框架清晰 …

作者头像 李华
网站建设 2026/4/2 10:01:02

服务器“会喘气”才省钱!白话版弹性伸缩配置指南

服务器“会喘气”才省钱!白话版弹性伸缩配置指南一、啥是弹性伸缩?给服务器装个“呼吸阀”你家空调夏天26度、冬天20度最舒服,服务器也一样——业务忙时多喊几台“帮手”,闲时让多余的“员工”下班。弹性伸缩就是给服务器装了个智…

作者头像 李华
网站建设 2026/4/2 0:37:42

学工系统解决方案:让教育管理更高效、更贴心

✅作者简介:合肥自友科技 📌核心产品:智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

作者头像 李华
网站建设 2026/3/22 6:59:14

mongodb连接工具下载地址

mongodb连接工具下载地址 页面地址:选择mongodb compass 免费版navicat连接教程: 把mongodb连接拷贝到里面就可以: 示例:mongodb://root:12322192.168.0.1:22222

作者头像 李华