专栏名称: OSC开源社区
OSChina 开源中国 官方微信账号
目录
相关文章推荐
程序猿  ·  450万虚假Star曝光,最低0.7元/个? ... ·  16 小时前  
程序员的那些事  ·  美国人下载 DeepSeek,最高判 20 ... ·  2 天前  
程序员的那些事  ·  一夜之间,微软、英伟达、亚马逊全部接入 ... ·  5 天前  
码农翻身  ·  强烈建议尽快搞个软考证!(2025重大红利) ·  5 天前  
程序员小灰  ·  DeepSeek遭暴力破解,攻击IP均来自美国! ·  1 周前  
51好读  ›  专栏  ›  OSC开源社区

Python 3.13「自由线程」导致整体性能下降?

OSC开源社区  · 公众号  · 程序员  · 2024-11-08 16:24

主要观点总结

本文主要介绍了Python 3.13版本引入的实验性自由线程模式(Free-threaded)以及全球解释器锁(GIL)的相关知识,并通过对性能测试结果的总结,阐述了自由线程模式对Python性能的影响。同时,也指出了兼容性问题以及实验状态。

关键观点总结

关键观点1: Python 3.13引入自由线程模式旨在提升性能

Python 3.13引入了新的实验性自由线程模式,该模式旨在通过移除全局解释器锁(GIL)来提升Python性能,特别是在多线程应用程序中。

关键观点2: 性能测试结果分析

通过基准测试发现,禁用GIL后,多线程模型性能最佳。自由线程模式由于需要禁用自适应解释器而整体性能下降。在4核机器上,使用自由线程的执行时间相较于单线程有所减少,但仍略慢于多进程方法。

关键观点3: GIL及其局限性

GIL通过限制只有一个线程在任何给定时间持有Python解释器的控制权来限制真正的并行性,这对多线程CPU密集型应用程序造成了瓶颈。

关键观点4: 兼容性问题

移除GIL会引入重大的兼容性挑战,因为许多C扩展和库依赖GIL来保证线程安全。

关键观点5: 实验状态

Python 3.13中的no-GIL构建目前处于实验阶段,尚未准备好用于生产环境。


正文

OSCHINA

↑点击蓝字 关注我们


[AI评选 投票有奖]

Python 3.13 引入了新的实验性自由线程模式(Free-threaded),旨在通过移除全局解释器锁 (GIL) 来提升 Python 性能,尤其是在多线程应用程序中。

近日,开发者使用 Python 3.12、3.13 和支持自由线程的 3.13(3.13t)运行了基准测试,包括使用和不使用 GIL(同时运行支持和不支持自由线程的 3.13 版),以测试不同场景下「自由线程」对性能的影响。
这名开发者通过 PageRank 算法的实现,比较了单线程、多线程和多进程模型的性能,并使用 CodSpeed 工具进行了性能测试。
结果显示,禁用 GIL 后,多线程模型性能最佳,但自由线程模式由于需要禁用自适应解释器而整体性能下降。

以下是此次性能测试的关键点总结:

  • GIL 及其局限性:CPython 中的 GIL 通过只允许一个线程在任何给定时间持有 Python 解释器的控制权来限制真正的并行性。这导致了多线程 CPU 密集型应用程序的瓶颈。

  • 自由线程 (no-GIL) 模式:Python 3.13 引入了一个没有 GIL 的实验性构建,允许多个线程真正并发地执行 Python 字节码。这有可能显著提高多核系统上 CPU 密集型任务的性能。

  • 性能改进:早期基准测试表明性能有所提升,尤其是在 I/O 密集型操作和特定场景中。但是,整体性能影响仍在评估中,预计在未来版本中会有所改进。

  • 兼容性问题:移除 GIL 会引入重大的兼容性挑战。许多 C 扩展和库依赖 GIL 来保证线程安全。使它们适应 no-GIL 的世界是一项艰巨的任务。

  • 实验状态:Python 3.13 中的 no-GIL 构建明确处于实验阶段。它尚未准备好用于生产环境,并且可能会发生变化。目标是收集反馈并在后续版本中改进实现。

测试结果

数据分析

  • 单线程: 作为基准,单线程执行时间被设为 1 个单位时间。

  • 多线程 (GIL): 在 4 核机器上使用标准的多线程(受 GIL 限制),PageRank 算法的执行时间为 1.05 个单位时间,比单线程略慢。这表明 GIL 阻碍了并行执行,甚至引入了额外的开销。

  • 多进程: 使用多进程,执行时间为 0.35 个单位时间,实现了约 3 倍的加速。这是因为多进程绕过了 GIL 的限制,实现了真正的并行计算。

  • 自由线程 (no-GIL): 使用自由线程,执行时间为 0.4 个单位时间,也实现了显著的加速,与多进程方法接近。这表明移除 GIL 可以有效提高多线程程序的性能。


相关来源
https://codspeed.io/blog/state-of-python-3-13-performance-free-threading
延伸阅读
Python 3.13与Python 3.12的性能测试对比——起飞了吗?
Python正式发布年度大更新3.13.0:实验性支持no-GIL、性能起飞!
no-GIL Python,启动!





请到「今天看啥」查看全文