编程学习网 > 编程语言 > Python > Python 的 GIL 终于要凉了?聊聊自由线程
2026
08-10

Python 的 GIL 终于要凉了?聊聊自由线程


最近 Python 圈子里有个话题又双叒叕火了——自由线程(Free Threading)

事情是这样的:

上个月 PyTorch 2.13 和 JAX v0.11 相继宣布不再给 CPython 3.13t 构建 wheel,全面转向 3.14t 和 3.15t

紧接着 8月4号,Python 3.15 第一个候选版本发布,自由线程的稳定 ABI 正式落地。

这节奏,感觉 GIL 是真的要被抬走了。

但说实话,不少小伙伴听到「自由线程」四个字,反应基本是——"好像...

能让 Python 多核并行?"然后就没有然后了。

今天咱们就把它掰扯清楚。

GIL 是个什么东西?

想象一下:你开了一家奶茶店,店里只有一台收银机

哪怕你雇了 8 个店员(8 核 CPU),顾客排了长队,但同一时刻,只能有 1 个人用收银机结账,其他 7 个人只能干瞪眼。

这台收银机,就是 Python 的 GIL(Global Interpreter Lock,全局解释器锁)


你会惊讶地发现:双线程并没有比串行快,甚至可能更慢。

因为 GIL 在背后卡着脖子——两个线程来回抢锁,上下文切换还额外浪费了时间。

说白了,GIL 让 Python 多线程在计算密集场景下变成了"假并行"。

那以前是怎么绕过去的?

Python 老司机们早就摸索出了几条绕路:

  • 多进程(multiprocessing):每个进程有自己的 GIL,相当于开多家分店,每家都有独立收银机。但进程间通信(IPC)很重,内存开销大。
  • asyncio:协程本质上还是单线程,适合 I/O 密集(网络请求、文件读写),碰上 CPU 密集一样趴窝。
  • C 扩展:把计算密集的部分用 C 重写,在 C 代码里手动释放 GIL。

这几招虽然有用,但总有一种"打补丁"的感觉。

社区里喊"去掉 GIL"的声音喊了快二十年,一直没人能拿出一个大家都能接受的方案。

直到 Meta 的 Sam Gross 站了出来。

自由线程:把收银机拆了

自由线程的核心思路简单粗暴:直接让 GIL 变成可选项

不再是一把大锁管所有东西,而是用一堆细粒度的小锁——给每个 Python 对象配一把微型的 PyMutex(只有 1 个字节),谁用谁锁,用完释放。

再配上原子引用计数和 mimalloc 线程安全内存分配器,让真正的多核并行成为可能。


在自由线程构建下,4 核 CPU 跑计算任务,速度真的能翻好几倍——不用再看 GIL 的脸色了。

现在能用吗?到哪一步了?

给你一张时间表,一看就明白:

版本 时间 状态
Python 3.13 2024年10月 实验性,标记 "experimental",单线程慢 20-40%
Python 3.14 2025年10月 正式支持,单线程只慢 5-10%,独立二进制 3.14t
Python 3.15 2026年10月(预计) 统一 ABI,一个扩展同时兼容 GIL/无GIL
Python 3.17-3.19 估计 2028-2030 GIL 默认关闭,甚至完全移除

重点来了:3.14 起,自由线程已经不是"实验性功能"了

如果你用的是 macOS 或者 Linux,现在就能体验。

去 Python 官网下载页,选带 free-threaded 标记的安装包:


目前超过 50% 的 PyPI 热门包(NumPy、SciPy、Pandas、Pillow 等)已经提供了自由线程专用 wheel

但是,别急着 All In

自由线程再香,也有几个坑需要先看清楚:

1. 单线程反而慢了 5-10%

没了 GIL 这个"大管家",每次操作对象都要走原子引用计数和细粒度锁,单线程下确实比普通 Python 稍慢。

如果你的程序本来就是单线程跑跑脚本,没必要折腾

2. 线程安全,还是得自己管

GIL 没了 ≠ 你的代码自动变安全了。

以前 GIL 默默帮你挡掉了很多竞态条件,现在你得自己用 threading.Lock 保护共享数据:


3. C 扩展兼容性

不是所有第三方库都适配了。

导入一个没声明支持自由线程的 C 扩展,GIL 会自动重新启用——相当于又回到了解放前。

最后

我的建议很简单:别盲目追新,但值得保持关注

写 Web 后端的,asyncio 够你用到退休;

搞数据分析、科学计算的,自由线程真的能让你少喝好几杯咖啡。

Python 花了二十年戴上的这把枷锁,正在一场持续多年的接力赛中,被一点一点解下来。

能亲眼见证这个过程,说实话,挺酷的。

彩蛋

Python 之父 Guido van Rossum 在这个话题上泼过一盆冷水。他说:"去 GIL 的重要性被过度夸大了。它主要服务 Meta 这种超大规模用户,对日常搬砖的影响没那么大。很多人尝试并行化后速度反而变慢了——说明大家对并发模型的理解还有进步空间。"

以上就是“Python 的 GIL 终于要凉了?聊聊自由线程的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。 

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取