关于 Python 3.13 你需要知道的一切 - JIT 和 GIL 上山了 | drew 的开发博客

主要观点:2024 年 10 月 2 日 Python 核心开发者和社区将发布[CPython v3.13.0],但已推迟至 10 月 7 日。此次发布有两大核心变化,一是“自由线程”版本的 CPython 可禁用全局解释器锁(GIL),二是支持实验性即时(JIT)编译。
关键信息:

  • GIL 介绍:Python 设计为单线程解释型语言,运行时生成字节码由解释器逐行执行。多线程时需创建全局互斥锁(GIL)以保证同一时间只有一个线程执行字节码,虽使垃圾回收更简单快速,但限制了多线程性能,如今多核心处理器普及,去除 GIL 的需求增加。
  • 去除 GIL 的原因及过程:多年来有人推动去除 GIL,主要原因是单核心性能提升有限而多核心普及,2021 年 Sam Gross 实现无 GIL 概念验证,Python 指导委员会提议投票通过 PEP 703,分三阶段逐步推出自由线程模式,最终将移除 GIL。
  • 性能表现:在不同设备上测试 Python 3.12 和 3.13(带和不带 GIL)的 CPU 密集型任务运行时性能,发现构建时支持自由线程的性能有显著下降(约 20%),多线程在 GIL 禁用时性能提升明显,单线程和多线程带 GIL 性能对比也符合预期,苹果硅芯片性能出色。还测试了性能随线程/进程数量的扩展情况,多线程和多进程模式在超过物理核心数量后仍有性能提升。
  • 尝试自由线程 Python:目前 3.13 处于候选版本,可通过 pyenv 安装 3.13.0rc2t 尝试,注意指定 -X gil=0 可确保 GIL 始终禁用,否则导入不支持无 GIL 运行的模块会重新启用 GIL。
  • JIT 介绍:JIT 是即时编译技术,Python 3.13 引入的是“复制-补丁”JIT,可根据代码运行情况进行增量优化,虽目前较简单,但为 Python 性能的未来发展带来希望。
  • 尝试 JIT:3.13 中的 JIT 是实验性的,需通过配置启用,可通过环境变量或特定配置选项打开,测试时需注意区分编译时启用和运行时启用。

重要细节:

  • Python 是编程语言规范,CPython 是其参考实现,还有其他 Python 实现如 PyPy、Jython、IronPython 等,但通常人们说“Python”指 CPython。
  • 多进程与多线程不同,每个进程有自己的内存空间,需使用特殊构造和通信来共享数据,且多进程比多线程开销大。
  • 运行基准测试时的注意事项,如使用的是简单迭代算法,工具为 hyperfine,测试环境并非专用硬件等。
  • 关于 SMT 和 HT 的区别,SMT 是通用术语,HT 是英特尔特定的 SMT 品牌名称。
  • 尝试 JIT 时的相关代码及注意事项,如通过特定函数判断 JIT 是否启用等。

进一步阅读:相关 PEP 文档和一些介绍文章。更新内容:2024 年 9 月 28 日更新 v3.13.0 发布日期为 10 月 7 日,2024 年 9 月 30 日更新图表并添加性能扩展部分。

阅读 30
0 条评论