社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

OSC开源社区 • 3 周前 • 124 次点击  

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,启动!

END









分享在看点赞~Orz

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/175781
 
124 次点击