第8章 并发模型与GIL


第 8 章 · 并发模型与 GIL

章节摘要:Python 并发的所有"玄学"——多线程跑不满 CPU、多进程开销大、异步快但代码怪——根子都在全局解释器锁。本章先把 GIL 的机制讲透(它保护什么、何时释放),再用它统一解释三种并发模型的取舍矩阵,最后系统讲 asyncio 的事件循环思维。

学习目标

阅读完本章,你应当能够:

  1. 说出 GIL 存在的历史原因(引用计数的线程安全)与它保护的临界区;
  2. 用实验证明"多线程加速 IO 密集、拖慢 CPU 密集"并解释原因;
  3. 按任务形态在 threading / multiprocessing / asyncio 三者间做出正确选型;
  4. 解释事件循环的调度模型,写出正确的 async/await 代码;
  5. 识别并修复并发下的共享状态竞态。

核心概念速览

先问 IO 还是 CPU,再问规模——两个问题问完,选型只剩一个答案。

子章节导航

8.1 GIL:多线程与多进程

GIL 的机制与实验、threading 与 multiprocessing 的真实表现、竞态与锁的正确用法。

8.2 asyncio 异步编程

事件循环调度模型、async/await 语义、并发原语与常见陷阱。

子章节之间的逻辑关系

8.1 用实验建立"GIL 决定线程天花板"的事实;8.2 的 asyncio 是绕开 GIL 的第三条路(单线程协作式调度)。两节合起来给出完整的并发决策地图。

前置知识与后续延伸

  • 前置:第 1 章引用计数(GIL 的因果起点)、第 7 章生成器的暂停恢复(协程的前身)。
    并发这一章的检验标准很实际:拿到任务先测 IO 与 CPU 的时间占比,再按矩阵选模型,最后用实验验证选择是否兑现了预期加速。三步走完,你对 GIL 的理解就不再是知道有这把锁,而是知道它什么时候碍事、什么时候无关、什么时候根本不该出现在你的方案里。另有一句提醒:并发 bug 的特点是难复现、看运气,竞态可能百万次运行才现形一次,所以并发代码评审的价值远高于事后调试,上线前把共享状态的每一处读写过一遍,比事后翻日志划算太多。

  • 为后续铺垫:第 9 章 Web 服务、爬虫的高并发抓取、数据库连接池,全部按本章的选型矩阵落地。

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U