“Python 3.13 性能炸裂?GIL 移除后的多线程实测来了”——看到这个标题,你是不是也期待着一场性能革命?
别急,实测数据可能会让你冷静一下。
GIL 移除:一场迟到的“解放”
先说说背景。Python 的全局解释器锁(GIL)长期以来像个“紧箍咒”,阻止了多线程程序同时在多个 CPU 核心上执行。即便你开了 8 个线程,CPU-bound 任务依然只能跑满一个核心。这也是为什么 Python 的多线程一直被戏称为“伪多线程”。
Python 3.13 带来了历史性变化:通过--disable-gil编译选项,可以构建一个“自由线程”(free-threaded)版本,彻底移除 GIL,让线程真正实现并行执行。官方文档将其标记为实验性功能——这很关键,后文会展开。
实测数据:理想很丰满,现实很骨感
那么,移除 GIL 后的 Python 3.13t(t 代表 free-threaded)到底表现如何?
我梳理了多个社区的实测结果:
场景一:CPU 密集型任务(各线程独立计算)
在 PyCon Wrocław 2024 的演示中,一个计数器累加任务,无 GIL 版本的多线程执行时间仅 1.61 秒,而有 GIL 版本需要 6.73 秒——提速超过 4 倍。另一位开发者在 8 核机器上测试数值计算任务,也获得了近 3 倍的性能提升。
场景二:多线程共享数据 + 锁竞争
同样是上述演示,当多个线程频繁访问共享内存并加锁时,无 GIL 版本的执行时间飙升至175.88 秒,而有 GIL 版本仅需23.89 秒。无 GIL 反而慢了 7 倍多。这说明,移除 GIL 并不等于无锁并发——线程安全仍然需要开发者自己保证,而原子操作和锁竞争的开销在自由线程下反而被放大了。
场景三:单线程性能衰退
这是最容易被忽视的问题。在 pyperformance 基准测试套件上,Python 3.13 自由线程版本的单线程性能开销约为 40%。有开发者在 Stack Overflow 上报告,同样的代码python3.13t 耗时 56 秒,而 python3.13(带 GIL)仅需 26 秒。
根本原因在于:自由线程构建中,Python 3.11 引入的自适应解释器被关闭了,因为它目前不是线程安全的。这导致单线程代码性能显著下降。
性能全景:不止 GIL 一件事
抛开 GIL,Python 3.13 在其他方面也有稳步提升。根据 pyperformance 的 100 项基准测试,3.13 相比 3.12 平均性能提升约 5%,其中 async 相关测试最高提升达 1.61 倍。相比 Python 3.10,整体性能提升约35-40%。
结论:别急着“真香”
回到标题的问题:Python 3.13 性能炸裂了吗?答案分两层:
对于 CPU-bound 且数据独立的多线程任务——是的,无 GIL 版本确实能带来数倍提升。
但对于单线程代码、共享数据频繁的任务,以及绝大多数现有项目——3.13t 不仅没有“炸裂”,反而可能更慢。
Python 3.13 的自由线程是一个伟大的开端,但远未成熟。官方文档明确警告:自由线程构建有额外开销且消耗更多内存,第三方库的兼容性也仍是未知数。
笔者的建议是:对于生产项目,暂时按兵不动,继续使用标准的 GIL 版本 Python 3.13,享受那 5% 的稳定性能提升。对于技术探索和实验性项目,可以大胆尝试 3.13t,并积极向社区反馈问题。真正的“性能炸裂”,或许要等到 Python 3.14 甚至 3.15——届时单线程开销有望从 40% 降至 10% 以内。
Python 无 GIL 的时代已经拉开序幕,但离“大结局”还有好几季。作为开发者,保持关注、理性选型,比盲目追新更重要。