python3 和 pypy3 有什么区别

what's the differences python3 and pypy3

今天我知道 pypy3 通过任何算法问题都比 python3 快 input() 时间。性能差异几乎高达12倍。

为什么会有这样的差异?

我假设当您说 python3 时,您指的是 CPython python 语言的默认和广泛使用的实现。

CPython

它是 C and C++ 编写的 python 语言的解释器。解释器将 python 代码(由人类编写,人类可以阅读)转换为机器代码(可以 read/understand 通过 machine/computer)。此过程涉及多个步骤。

PyPy

它是用 RPython 编写的 python 语言的 JIT 编译器。 JIT 编译器执行需要编译的代码,即在运行时 JIT 编译代码,就在执行它之前。

这两种实现的不同处理方法 python 代码是不同 int 速度背后的原因。下面 link 将为您提供更多详细信息。

旨在实现不同目标的 Python 语言的实现很少。

CPython

PyPy

JIT

Design of CPython’s Compiler

PyPy

Alternatives

请检查一下,当我们谈到 Python 编程语言时,我们通常指的不仅仅是语言,还有实现。 Python 是一种语言的规范,可以通过多种不同的方式实现。

Python编程语言的默认实现是Cpython(假设python3你的意思是Cpython) . Cpython顾名思义就是用C语言写的。 Cpython将python源代码编译成中间字节码,由Cpython虚拟机执行。

Jython 是 Python 编程语言的一种实现,可以在 Java 平台上 运行。 Jython 程序使用 Java 类 而不是 Python 模块。 Jython 编译成 Java 字节码,然后可以被 Java 虚拟机 运行

PyPy 如果您希望您的代码 运行 更快,您应该只使用 PyPy。 — Guido van Rossum(Python 的创建者) Python 是一种动态编程语言。 Python 据说很慢,因为默认的 CPython 实现以字节码形式编译 python 源代码,与机器代码(本机代码)相比速度较慢。 PyPy 派上用场了。

PyPy 是用 Python 编写的 Python 编程语言的实现。解释器是用 RPython(Python 的子集)编写的。 PyPy 使用即时 (JIT) 编译。简单来说,JIT就是利用编译的方式,让解释器系统更加高效和快速。所以基本上 JIT 使得将源代码编译成本地机器代码成为可能,这使得它非常快。 PyPy 还默认支持无堆栈模式,为大规模并发提供微线程。据说比 Cpython.

快大约 7.5 倍

希望对您有所帮助。

CPython

它是用 C 和 C++ 编写的 python 语言的解释器。解释器将 python 代码(由人类编写并可以被人类阅读)转换为机器代码(可以由机器 read/understood )。此过程涉及多个步骤。
CPython 是 Python 的参考实现,用 C 编写。它将 Python 代码编译为中间字节码,然后由虚拟机解释。 CPython 提供与 Python 包和 C 扩展模块的最高级别兼容性。
如果您正在编写开源 Python 代码并希望覆盖尽可能多的受众,则最好以 CPython 为目标。要使用依赖于 C 扩展功能的包,CPython 是您唯一的实现选项。
Python语言的所有版本都是用C实现的,因为CPython是参考实现。

PyPy

它是用 RPython 编写的 python 语言的 JIT 编译器。 JIT 编译器执行需要编译的代码,即在运行时 JIT 编译代码,就在执行它之前。
PyPy 是一个 Python 解释器,它是在 Python 语言的一个受限静态类型子集 RPython 中实现的。解释器具有即时编译器并支持多个后端(C、CLI、JVM)。
PyPy 旨在最大程度地兼容参考 CPython 实现,同时提高性能。
如果您希望提高 Python 代码的性能,值得一试 PyPy。在一组基准测试中,它目前比 CPython.
快 5 倍以上 PyPy 支持 Python 2.7。 PyPy3,测试版发布,目标 Python 3.

差异:

1.PyPY 内置了一个 JIT 编译器,这意味着 PyPY 可以比 CPython(标准版本)快得多——我的一个数学应用程序在 PyPy 下快了 10 倍。

2.PyPy 带有一个 GIL,其工作方式与 CPython 的类似。曾进行过移除 GIL 的实验性尝试,但最终没有成功。它使用不同的垃圾收集机制,这意味着它更擅长多线程

3.PyPy 目前仅与 Python 3.6 兼容 - 通常比标准 Python

至少晚 6 个月

4.PyPy 不支持扩展模块使用的完整 API,因此某些第 3 方扩展模块根本无法工作。例如,必须为 PyPy 创建一个特殊版本的 Numpy。

5.there 由于 PyPy 中不同的垃圾收集器,语义差异很小