ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Python3.13性能炸裂?GIL移除后的多线程实测来了

Python3.13性能炸裂?GIL移除后的多线程实测来了 “Python 3.13 性能炸裂GIL 移除后的多线程实测来了”——看到这个标题你是不是也期待着一场性能革命别急实测数据可能会让你冷静一下。GIL 移除一场迟到的“解放”先说说背景。Python 的全局解释器锁GIL长期以来像个“紧箍咒”阻止了多线程程序同时在多个 CPU 核心上执行。即便你开了 8 个线程CPU-bound 任务依然只能跑满一个核心。这也是为什么 Python 的多线程一直被戏称为“伪多线程”。Python 3.13 带来了历史性变化通过--disable-gil编译选项可以构建一个“自由线程”free-threaded版本彻底移除 GIL让线程真正实现并行执行。官方文档将其标记为实验性功能——这很关键后文会展开。实测数据理想很丰满现实很骨感那么移除 GIL 后的 Python 3.13tt 代表 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 一件事抛开 GILPython 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 的时代已经拉开序幕但离“大结局”还有好几季。作为开发者保持关注、理性选型比盲目追新更重要。
返回列表