Python 3.12 Goals 还可以更快!

2022-10-1222:41:54编程语言入门到精通Comments1,418 views字数 1631阅读模式

Python 3.12 Goals 还可以更快!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

按照发布计划,Python 3.11.0 将于 2022 年 10 月 24 日发布。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

据测试,3.11 相比于 3.10,将会有 10-60% 的性能提升,这个成果主要归功于“Faster CPython”项目,即“香农计划”。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

关于“香农计划”的详情,可查看 Python 之父的主题分享,以及他的一则播客访谈。(点击阅读)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

3.11 版本为 Python 的提速开了一个激动人心的好头。接下来,3.12 还会有更多动作。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

以下文章翻译自“香农计划”的《Python 3.12 Goals》,大家先一睹为快吧!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

作者:Mark Shannon文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

译者:豌豆花下猫@Python猫文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

英文:https://github.com/faster-cpython/ideas/wiki/Python-3.12-Goals

本文内容可能会改动,以实际版本为准!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

本文是 Faster CPython 计划在 3.12 中实现的主要内容的概要。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

跟踪优化器

Python 3.11 提升速度的主要方法是用更快的与上下文相关的操作码(自适应的专门化操作码)替换个别的操作码,下一个大的改进方法是优化多个操作码的运行。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

为此,现有的许多高级操作码将被替换成低级操作码,例如,用于检查版本号和引用计数的操作码。这些更简单的操作码更容易进行优化,例如,可以删除冗余的引用计数操作。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

这些更底层的操作码还能让我们得到一组适合用于生成机器代码的指令(在 CPython 和第三方 JIT 项目中都适用)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

为了做到这点,解释器循环(interpreter loop)将基于声明性的描述而生成。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

这可减少一部分为了保持解释器循环与某些相关函数同步而产生的 bug(mark_stacks、stack_effect 等函数),同时也让我们可以对解释器循环作较大的更改试验。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

多线程并行

Python 当前每个进程有一个全局解释器锁(GIL),阻碍了多线程的并行。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

PEP-684:https://peps.python.org/pep-0684文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

PEP-554:https://peps.python.org/pep-0554文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

Python 3.12 Goals 还可以更快!

PEP-684 提出了一个方案,即保证所有的全局状态都是线程安全的,并移动到每个子解释器的全局解释器锁中使用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

Python 3.12 Goals 还可以更快!

PEP-554 提出了让 Python 创建子解释器的方案(目前只是一个 C API 特性),从而实现真正的多线程并行。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

Python猫注:PEP-554 早在 2017 年就提出了,目标是落地在 Python 3.8-3.9 版本,然而事与愿违。早在 2019 年的时候,我还翻译了一篇《Has the Python GIL been slain?》。屠刀已挥出,让它再飞一会~~文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

更多专门化

我们分析了哪些字节码将从专门化中获益最多,计划在 3.12 完成其余的高收益的改进。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

https://github.com/faster-cpython/ideas/issues/74文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

Python 3.12 Goals 还可以更快!

较小的对象结构

有许多可以减少 Python 对象结构大小的机会。由于它们被频繁使用,这不仅有利于总体的内存使用,还有利于缓存的一致性。我们计划在 3.12 中实现最有希望的一些想法。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

这里有一些向后兼容性与性能之间的权衡问题,可能需要提出一个 PEP 来建立共识。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

减少内存管理的开销

我们不仅会减小对象的大小,还会使它们的 layout 更加规则。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

这不仅能优化内存的分配及释放,还能在 GC 和重新分配期间加快遍历对象的速度。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

API 稳定性

除了前述项目外,开发团队还将提升 CPython 代码库的整体质量:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html

  • 通过减少不同编译阶段的耦合,使编译器更易于维护与测试。
  • 积极地在 C 语言级别监控和改进 CPython 测试套的代码覆盖率。
  • 改进 Python 性能基准测试套,加入更具代表性的现实世界的负载测试。
  • 协助处理 CPython 问题和 PR,特别是与性能有关的问题。
  • 增加用于标准基准测试的机器,增加 macOS 和 Windows 的测试结果。
  • 继续跟主要的深度使用 Python 内核的项目合作,帮助它们适配 CPython 解释器的更改。
注:文中图片为译者所加。
作者:豌豆花下猫
来源:Python 猫
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/28260.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/28260.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定