HeadlinesBriefing HeadlinesBriefing.com

Python 3.15 性能基准测试结果

Hacker News •
×

每到十月,就是时候给新版 Python 来个实测(技术上说,我使用的其实是 3.15.0rc3 版本,官方的 3.15 版本还要几天才发布)。正如我去年 Python 3.14 性能文章所做的那样,今天我分享一次新的非正式 Python 基准测试,对比 Python 3.15 与从 3.10 一路回溯的旧版解释器。如果你不感兴趣那些图表和表格,只想看我的分析,随时可以跳到文章末尾的结论章节。我刚刚把我的基准测试叫做 "non-formal"(非正式)。什么是非正式基准测试?无法获得编程语言客观、普适的性能衡量标准。你只能编写一些程序并运行它们来获得性能指标。其他程序可能显示相似的性能特征,也可能不相似,真的无法知道。我这次基准测试的意图仅仅是感受 Python 各版本之间的性能变化,但我必须明确:我并非试图获得 Python 解释器的全面性能概况。对于我的基准测试,我将运行两个名为 fibo.py 和 bubble.py 的程序,你可以查看它们。这些是我过去几次基准测试中使用过的相同程序。第一个计算斐波那契数列的数字,我发现递归在 Python 解释器中 somewhat 低效。另一方面,冒泡排序只使用 for-loop,没有任何递归。我的基准测试并未尝试覆盖其他类型的程序。特别是,注意我并未在基准测试中包含 I/O 受限代码。因为最近 Python 版本的一些性能改进围绕多线程展开,我还为每个程序创建了多线程变体,所以总共有四种不同的测试。 完整的测试矩阵 实际上,我的测试矩阵相当复杂,因为我必须在所有 Python 版本下运行四个程序变体,以及对支持它们的 JIT 和 free-threading 替代方案。我喜欢在 Py Py 下运行测试,因为这个解释器在过去的基准测试运行中展现出了令人印象深刻的性能。为了把 Python 性能置于更广泛的生态系统中,我还把这两个程序移植到了 Java Script(Node.js)和 Rust。以下是我使用的完整测试矩阵: 2个测试脚本:fibo.py:使用递归计算斐波那契数字;bubble.py:对随机生成的数字列表进行排序,不使用递归。 2种线程模式:单线程;4个并行线程。 6个 Python 版本,加上 Py Py、Node.js 和 Rust 的最新版本:CPython 3.10, 3.11, 3.12, 3.13, 3.14, 3.15; Py Py 3.12; Node 26.3; Rust 1.97. 3个 Python 解释器:标准模式;即时编译(JIT):仅限 CPython 3.13+;Free-threading(FT):仅限 CPython 3.13+。我之前基准测试的读者可能记得,我矩阵中有一个额外的维度,用于对比 Linux 和 mac OS。考虑到在这两次之前的基准测试运行中,它们之间没有显著差异,这次我决定取消 mac OS 测试,所以所有测试都在我运行 Gentoo Linux 的 Linux 笔记本电脑上进行,配备 Intel Core i5 CPU。我测量每个参与者性能的方法是运行测试程序三次,并取三次运行时间的平均值。在我下面分享的结果表中,我还展示了与 3.15 版本的速度差异,并且在合理的情况下也展示了与给定解释器上一版本的速度差异。对于速度比较,我使用一个简单的比率,其中 1x 表示同等速度,0.5x 表示半速(或耗时是原来的两倍)...

来源: Hacker News · 由HeadlinesBriefing整理摘要