当前位置: 首页 > 面试题库 >

PyPy —如何击败CPython?

桂梓
2023-03-14
问题内容

来自Google开源博客:

PyPy是Python中Python的重新实现,它使用先进的技术来尝试获得比CPython更好的性能。多年的努力终于有了回报。我们的速度结果通常会击败CPython,从稍慢的速度到实际应用程序代码的速度提高2倍,再到小型基准测试的速度提高10倍。

这怎么可能?哪个Python实现用于实现PyPy?CPython的?PyPyPy或PyPyPyPy击败他们的分数的机会是什么?

(在相关说明中……为什么有人会尝试这样的方法?)


问题答案:

Q1。 这怎么可能?

在某些情况下,手动内存管理(这是CPython对其计数的方式)可能比自动管理要慢。

CPython解释器的实现局限性排除了PyPy可以进行的某些优化(例如,细粒度的锁)。

正如Marcelo所述,JIT。能够即时确认对象的类型可以节省您进行多个指针取消引用的操作,以最终到达您要调用的方法。

Q2。 哪个Python实现用于实现PyPy?

PyPy解释器在RPython中实现,RPython是Python的静态类型子集(该语言而不是CPython解释器)。-有关详细信息,请参阅https://pypy.readthedocs.org/en/latest/architecture.html。

Q3。 PyPyPy或PyPyPyPy击败他们的分数的机会是什么?

那将取决于这些假设解释器的实现。例如,如果其中一个拿到了源代码,对其进行了某种分析,并在运行了一段时间后将其直接转换为目标紧密的特定汇编代码,我想它会比CPython快得多。

更新: 最近,在一个精心设计的示例中,PyPy优于使用编译的类似C程序gcc -O3。这是一个人为的案例,但确实体现了一些想法。

Q4。 为什么有人会尝试这样的事情?

从官方网站。https://pypy.readthedocs.org/zh_CN/latest/architecture.html#mission-
statement

我们旨在提供:

  • 一个通用的翻译和支持框架,用于生成
    动态语言的实现,强调
    在语言规范和实现
    方面之间的明确区分。我们称此为RPython toolchain_。

  • Python_语言的合规,灵活和快速实现,该语言使用上述工具链来启用新的高级高级功能,而不必对低级细节进行编码。

通过以这种方式分离关注点,我们的Python和其他动态语言的实现能够为任何动态语言自动生成即时编译器。它还允许采用混合匹配的方法来实施决策,包括许多历史上在用户控制范围之外的决策,例如目标平台,内存和线程模型,垃圾回收策略以及所应用的优化,包括是否具有首先是JIT。

C编译器gcc用C实现,Haskell编译器GHC用Haskell编写。您是否有理由不使用Python编写Python解释器/编译器?



 类似资料:
  • PyPy 是用 Python 实现的 Python 解释器。PyPy 是 Python开发者为了更好的Hack Python创建的项目。此外,PyPy比CPython是更加灵活,易于使用和试验,以制定具体的功能在不同情况的实现方法,可以很容易实施。 该项目的目标是,让PyPy比C实现的Python更为容易的适应各个项目和方便裁剪。

  • 问题内容: 我想知道如何在Windows XP 32位上使用PyPy 1.8。我从网站上下载了zip文件,并将其安装到“我的文档”文件中。最初,我认为它与psyco类似,因为我必须“导入psyco”,但是我发现PyPy.exe的行为类似于Python命令行。 我尝试将脚本拖到PyPy.exe中运行它们,但似乎根本不起作用。尝试在PyPy中使用“ python”命令会产生“未定义全局名称’pytho

  • 问题内容: 我已经听到很多有关PyPy项目的信息。他们声称它比其站点上的CPython解释器快6.3倍。 每当我们谈论诸如Python之类的动态语言时,速度都是头等大事。为了解决这个问题,他们说PyPy快6.3倍。 第二个问题是并行性,臭名昭著的Global Interpreter Lock (GIL)。为此,PyPy表示可以提供无GIL的Python。 如果PyPy可以解决这些巨大的挑战,那么它

  • PyPy是一个Python实现的动态语言实现框架。 本章假定读者熟悉如字节码和常量叠算等有关解释器和编译器的基本概念。 19.1. 一点历史 Python是一种高层次动态编程语言。它是由荷兰程序员Guido van Rossum在20世纪80年代末发明的。Guido最初的实现是一个用C语言编写的传统的字节解释器,人称CPython。现在有许多其他的Python实现。其中最引人注目的有用Java编写

  • 我已经在运行El Capitan的Mac上安装了Python 2.7和3.5。此外,我在python中使用了Symphy包(与pip一起安装)。我想用Pypy(用自制软件安装)运行我的代码,但Pypy似乎找不到Sympy,并说: “没有名为sympy的模块” 我根本不是专家,现在不知道该怎么办。Sympy可以很好地与Python2和3配合使用,但不能与Pypy配合使用。 我感谢你的每一个回答,提前

  • 从第60期和第40期的讨论看来,PyPy以前不能构建gmpy。目前我打算使用的是可能的素数代码,这在GMPY2中很方便。我得到的印象是,对gmpy2的调用越多,就意味着PYPY的效率越低。当前是否可以使用gmpy2,或者我必须使用类似GMPY_CFFI的东西? 在PyPy中使用pip时出现的错误是