news 2026/7/3 0:14:14

异步、多线程、并发

作者头像

张小明

前端开发工程师

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/7/2 19:08:47

如何快速掌握STM32 CANopen协议栈:终极开发指南

如何快速掌握STM32 CANopen协议栈:终极开发指南 【免费下载链接】CanOpenSTM32 CANopenNode on STM32 microcontrollers. 项目地址: https://gitcode.com/gh_mirrors/ca/CanOpenSTM32 面对工业自动化项目中复杂的通信需求,你是否在为STM32微控制器…

作者头像 李华
网站建设 2026/7/1 21:01:00

HACS集成验证错误终极解决方案:从入门到精通的完整指南

HACS集成验证错误终极解决方案:从入门到精通的完整指南 【免费下载链接】integration HACS gives you a powerful UI to handle downloads of all your custom needs. 项目地址: https://gitcode.com/gh_mirrors/in/integration 你是不是也曾经兴奋地想要为H…

作者头像 李华
网站建设 2026/6/30 18:28:50

房贷提前还款测算程序,输入贷款总额,利率,还款年限,计算提前还款后的利息节省金额和月供变化。

代码生成场景响应以下是基于金融科技模式与创新课程的房贷提前还款测算程序,通过模块化设计实现“参数输入-还款计算-提前还款分析-结果输出”全流程,支持等额本息还款方式下提前还款的利息节省与月供变化测算。代码遵循准确性、实用性、可读性、可扩展性…

作者头像 李华
网站建设 2026/7/2 12:06:35

图灵机的极限在哪里?DeepMind掌门人的终极追问与AGI路线图

图灵机的极限在哪里?DeepMind掌门人的终极追问与AGI路线图 原创 JOJO白金之星 高飞的电子替身 2025年12月17日 21:54 2025年12月17日,Google DeepMind播客发布了本季收官之作。数学家Hannah Fry与公司联合创始人兼CEO Demis Hassabis进行了年度深度对话…

作者头像 李华
网站建设 2026/7/1 8:15:15

Zettlr LaTeX写作效率翻倍的7个实战技巧

Zettlr LaTeX写作效率翻倍的7个实战技巧 【免费下载链接】Zettlr Your One-Stop Publication Workbench 项目地址: https://gitcode.com/GitHub_Trending/ze/Zettlr 还在为学术论文的排版而苦恼吗?当你的同事已经提交完稿,你却还在为公式对齐和参…

作者头像 李华