news 2026/1/29 4:51:43

异步、多线程、并发

作者头像

张小明

前端开发工程师

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/1/27 10:59:18

终极跨平台书签同步指南:BookmarkHub免费完整解决方案

终极跨平台书签同步指南:BookmarkHub免费完整解决方案 【免费下载链接】BookmarkHub BookmarkHub , sync bookmarks across different browsers 项目地址: https://gitcode.com/gh_mirrors/bo/BookmarkHub 你是否曾在办公室Chrome浏览器收藏的重要资料&#…

作者头像 李华
网站建设 2026/1/28 12:08:44

5分钟掌握Python PSD解析:PSD Tools完整开发指南

5分钟掌握Python PSD解析:PSD Tools完整开发指南 【免费下载链接】psd-tools 项目地址: https://gitcode.com/gh_mirrors/ps/psd-tools 在当今设计自动化需求日益增长的背景下,PSD文件的高效处理已成为开发者和设计师的必备技能。Python PSD Too…

作者头像 李华
网站建设 2026/1/27 3:46:26

Windows触控板驱动终极指南:解锁Apple设备全部潜能

还在为Windows系统下Apple触控板功能受限而烦恼吗?mac-precision-touchpad项目为你带来完美解决方案!这款开源Windows触控板驱动能够让你的MacBook触控板或Magic Trackpad在Windows平台上实现原生级别的精密触控体验,彻底告别操作卡顿和功能缺…

作者头像 李华
网站建设 2026/1/20 8:30:22

COMSOL网格划分:有限元分析中的基础与技巧

有限元分析(FEA)是求解工程与物理学问题中广泛应用的数值分析方法。在进行有限元分析中,网格划分作为一个基础而关键的步骤,能够直接影响结果的精确度与计算效率。本文将简要介绍网格划分的作用、COMSOL中常见的网格类型及划分技巧…

作者头像 李华
网站建设 2026/1/27 2:57:56

Langflow第三方组件完全指南:从基础使用到高级集成

Langflow第三方组件完全指南:从基础使用到高级集成 【免费下载链接】langflow ⛓️ Langflow 是 LangChain 的用户界面,使用 react-flow 设计,旨在提供一种轻松实验和原型设计流程的方式。 项目地址: https://gitcode.com/GitHub_Trending/…

作者头像 李华