news 2026/6/24 13:01:07

异步、多线程、并发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
异步、多线程、并发

这是一个非常重要的基础概念问题。异步(Asynchronous)虽然经常一起出现,但它们在原理、实现方式和适用场景上有本质区别。下面我们用清晰的结构来区分三者:


一、核心定义对比

概念核心思想关键词
异步(Async)任务发起后不等待完成,立即返回;完成后通过回调/事件通知单线程、事件循环、非阻塞
并发(Concurrency)多个任务“看起来”同时进行(可能交替执行)逻辑上的“同时”
多线程(Multithreading)多个线程真正并行或交替执行(由操作系统调度)多执行流、共享内存、GIL(Python)

一句话总结

  • 并发是目标(让多个任务高效推进),
  • 异步和多线程是实现并发的两种不同手段

二、详细解释 + 类比

1.异步(Asynchronous)

  • 运行环境:通常在单线程中,依靠事件循环(event loop)调度。
  • 工作方式
    • 当遇到 I/O 操作(如网络请求、文件读写),不阻塞,而是注册一个“回调”;
    • 程序继续执行其他任务;
    • I/O 完成后,事件循环通知程序回来处理结果。
  • 适合场景I/O 密集型任务(如 API 调用、数据库查询、文件读写)。
  • Python 实现async/await+asyncio

生活类比

你去餐厅点餐(发起请求),不站在厨房门口等(不阻塞),而是坐回座位玩手机(做其他事)。厨师做好后喊你(事件触发),你再去取餐(处理结果)。


2.多线程(Multithreading)

  • 运行环境多个线程(轻量级进程)由操作系统调度,可运行在多核 CPU 上。
  • 工作方式
    • 每个线程独立执行一段代码;
    • 线程间可共享内存(需加锁避免冲突);
    • 在 Python 中受GIL(全局解释器锁)限制,CPU 密集型任务无法真正并行
  • 适合场景
    • I/O 密集型(有效,因为 I/O 时 GIL 会释放);
    • CPU 密集型(在 Python 中效果差,建议用多进程)。
  • Python 实现threading模块。

生活类比

餐厅有多个服务员(线程),你点餐后,一个服务员去厨房下单,另一个服务员同时接待新客人。他们真正并行工作


3.并发(Concurrency)

  • 不是一种技术,而是一种现象或目标
  • 定义:系统能在一段时间内处理多个任务的能力,不要求“同一时刻”执行。
  • 实现方式
    • 单核 CPU:通过快速切换(时间片轮转)实现并发(如多线程);
    • 异步:通过协作式调度(事件驱动)实现并发;
    • 多核 CPU:可实现并行(Parallelism,是并发的子集)。

🔁并发 ≠ 并行

  • 并发:多个任务交替进行(单核也能做到);
  • 并行:多个任务真正同时执行(需要多核)。

三、在 Python 中的关键差异(重点!)

特性异步(asyncio多线程(threading
线程数单线程多线程
是否受 GIL 影响否(无 GIL 问题)是(CPU 密集型无法加速)
资源开销极低(协程切换快)较高(每个线程有栈空间)
编程复杂度需要async/await改造需处理线程安全(锁、队列)
适用任务类型I/O 密集型(网络、文件)I/O 密集型(也可用于简单 CPU 任务)
能否利用多核❌(单线程)⚠️(I/O 可,CPU 不行)

💡Python 的 GIL 决定了

  • 多线程对CPU 密集型任务几乎无加速效果
  • 异步对I/O 密集型任务效率极高(如你的代码中调用多个 API)。

四、回到你的代码:为什么用“异步”而不是“多线程”?

你的程序主要做以下事情:

  • 调用 API(网络 I/O)

✅ 这些全是I/O 密集型操作,且不需要 CPU 计算

因此:

  • 异步方案:用asyncio+AsyncOpenAI单线程内并发等待多个 API 响应,资源占用少,代码清晰。
  • 多线程方案:也可以用ThreadPoolExecutor,但线程切换开销更大,且需处理线程安全(虽然这里不需要)。

🎯 结论:对于纯 I/O 场景,异步通常是更优选择


五、一张图总结

┌──────────────┐ │ 并发 │ ←─ 目标:高效处理多任务 └──────┬───────┘ │ ┌──────────────┴──────────────┐ ▼ ▼ ┌───────────────┐ ┌──────────────────┐ │ 异步 │ │ 多线程 │ │ (单线程+事件循环) │ │ (多执行流+OS调度) │ └───────────────┘ └──────────────────┘ │ │ ▼ ▼ 适合 I/O 密集型 适合 I/O 密集型(Python 中 CPU 密集型无效)

六、扩展:如何实现 CPU 密集型并发?

如果任务是 CPU 密集型(如图像处理、加密计算),在 Python 中应使用:

  • 多进程multiprocessing):绕过 GIL,真正利用多核;
  • 或将计算卸载到 C/C++ 扩展(如 NumPy、OpenCV 内部已优化)。

记住

  • 异步 = 协作式多任务(靠 yield/await 主动让出);
  • 多线程 = 抢占式多任务(靠 OS 强制切换);
  • 并发 = 多任务管理的艺术,两者都是它的实现手段。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 5:35:45

快速上手:StaMPS InSAR数据处理全流程解析

StaMPS(Stanford Method for Persistent Scatterers)是一款专业的合成孔径雷达干涉测量软件,专门用于从SAR时间序列中提取高精度的地面位移信息。这款工具结合了持久散射体和小基线集技术,能够有效监测地表毫米级的微小变化。 【免…

作者头像 李华
网站建设 2026/6/23 23:37:51

替代LM74610_120V理想二极管控制器

产品描述:(替代LM74610)PC2781 是高边驱动控制器配合 N 沟道功率MOSFET 控制器, 在应用时与外部 N 沟道功率MOSFET、电容储存器共同使用,实现二极管电路功能,该二极管电路在串联电流源时具有低平均正向导通…

作者头像 李华
网站建设 2026/6/22 20:16:07

开源白板工具OpenBoard:从零开始到团队协作的完整指南

在数字化协作日益重要的今天,开源白板工具OpenBoard为团队提供了强大的可视化沟通平台。无论您是需要进行远程会议、在线教学还是创意头脑风暴,这款跨平台工具都能满足您的需求。本文将带您从零开始,全面掌握OpenBoard的安装配置、核心功能使…

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

FLUX.1-DEV-BNB-NF4终极指南:4bit量化让你的AI绘图更高效

FLUX.1-DEV-BNB-NF4终极指南:4bit量化让你的AI绘图更高效 【免费下载链接】flux1-dev-bnb-nf4 项目地址: https://ai.gitcode.com/hf_mirrors/lllyasviel/flux1-dev-bnb-nf4 还在为AI绘图模型占用太多显存而困扰吗?FLUX.1-DEV-BNB-NF4带来了革命…

作者头像 李华
网站建设 2026/6/21 23:06:27

SM3加密算法PHP实现:国密标准的安全保障终极指南

在数据安全日益重要的今天,开发者们迫切需要一种既安全又易于实现的加密解决方案。SM3-PHP项目正是为此而生,它提供了国密标准SM3算法的纯PHP实现,让您在无需安装任何扩展的情况下就能享受专业级的加密保护。 【免费下载链接】SM3-PHP 国密标…

作者头像 李华
网站建设 2026/6/23 19:02:10

WebRTC视频会议平台终极指南:5步搭建企业级实时通信系统

WebRTC视频会议平台终极指南:5步搭建企业级实时通信系统 【免费下载链接】openvidu OpenVidu Platform main repository 项目地址: https://gitcode.com/gh_mirrors/op/openvidu 在数字化协作时代,构建稳定可靠的WebRTC视频会议平台已成为企业必备…

作者头像 李华