Skip to content

并发、并行、异步、流水线:四个词不要混着用

对应视频:EP02《并发、并行、异步、流水线》
视频入口:B站 EP02 定时稿(计划公开:2026-08-10 11:08)。 对应合集:Python 并发实战:从基础模型到语音工程。 本文为视频的工程展开版,补充代码模板、排查链路、状态字段和检查清单。 最后核验:2026/08/09 08:26:33

视频用时间线解释四个概念。文章把它们放进同一张工程表,避免后面讨论线程、协程、进程、队列时语言混乱。

并发、并行、异步和流水线的关系图

这张图用四个问题拆开概念:任务怎么组织、算力是否同时执行、等待时是否让出控制权、阶段之间如何协作。

阅读路线

  1. 先区分四个词各自回答的问题。
  2. 再看它们在语音流水线里的位置。
  3. 最后用选型表连接到 Python 工具。

四个概念

概念回答的问题典型实现
并发能不能同时管理多个未完成任务线程池、事件循环、任务队列
并行能不能同一时刻真的执行多个任务多进程、多核、GPU batch
异步等待时能不能让出控制权asyncio、异步网络库
流水线复杂任务能不能拆阶段推进Queue、asyncio.Queue、任务状态表

放进语音任务里

text
多个文件同时处理              → 并发
多个转码进程同时占用 CPU       → 并行
多个 ASR 请求等待服务端返回    → 异步
扫描、转码、识别、落盘分阶段   → 流水线

这四个能力经常组合出现。一个成熟的批量语音系统可能用线程池扫描文件,用外部命令池转码,用 asyncio 调 ASR API,用队列连接每个阶段。

常见误解

误解为什么错正确说法
并发就是并行并发可以只是同时管理任务,不一定同时执行并发是组织, 并行是执行
async 就一定快阻塞函数会堵住事件循环async 适合非阻塞等待
进程池比线程池高级进程池成本更高,适合 CPU 密集任务先看瓶颈再选
流水线就是多线程流水线重点是阶段和背压队列和状态比线程数量更重要

工程补充:怎么把这篇用到项目里

读图方式

  • 并发和并行不是一组同义词:并发是组织多个未完成任务,并行是多个计算资源同一时刻工作。
  • 异步只说明等待时能让出控制权,不保证 CPU 计算更快,也不保证同步库不会堵住事件循环。
  • 流水线关注阶段边界、队列容量和背压,它经常同时包含线程池、进程池和异步 API。

排查路径

  • 看到“慢”时先问:它是在等待、计算,还是多个阶段互相拖住。
  • 如果任务是等待型,观察连接数、timeout、响应耗时;如果是计算型,观察 CPU util 和函数热点。
  • 如果阶段之间堆积,观察 qsize、每阶段吞吐和最慢 Consumer。

问题、证据和解决动作

问题现场先查什么解决动作
把网络等待叫 CPU 并行问题CPU 低、请求耗时长用线程池或 asyncio 管等待
把 CPU 计算包进 async事件循环卡住、任务成批完成用进程池或释放 GIL 的库隔离计算
多个阶段共用一个 worker 池转码拖住 API,API 拖住落盘按阶段拆池,用 Queue 连接
只说“我要异步”没有资源指标和等待点先标注等待点,再选异步库或隔离策略

落地边界

  • 写设计文档时把四个词分开用,避免团队在不同问题上争同一个名词。
  • 一个系统可以同时是并发、局部并行、局部异步,并且整体是流水线。

实战检查清单

  • 当前讨论的是任务组织,还是 CPU 同时执行。
  • 当前任务是在等待,还是在计算。
  • 是否存在多个阶段,且每个阶段瓶颈不同。
  • 是否需要队列表达阶段之间的压力。
  • 是否把“异步函数”误当成“整个系统异步”。

读完之后能完成什么

  • 能准确解释并发、并行、异步、流水线的差异。
  • 能把一个任务标注为等待型、计算型或多阶段流水线。
  • 能为下一步工具选择提供清晰语言。
别急,先让缓存热一下。