字节码是直接由python虚拟机执行,还是转换为机器码并由python虚拟机执行?

2024-06-28 14:37:38 发布

您现在位置:Python中文网/ 问答频道 /正文

字节码直接由python虚拟机执行,还是转换为机器码并由python虚拟机执行

python docs bytecode如下所示 这种“中间语言”被称为运行在虚拟机上,该虚拟机执行与每个字节码对应的机器代码

我阅读了stackoverflow中有关PVM、字节码的所有问题。python代码执行的最后一部分并没有被任何人清楚地解释

以下2个流量中哪一个是正确的

  1. 字节码由VM转换为机器码,VM执行机器码?CPU是做什么的?这里是空闲的吗

  2. 字节码由VM转换为机器码,VM是否将机器码发送给CPU执行


Tags: 代码机器语言docs字节vmcpustackoverflow
2条回答

Python是一种语言。CPython是Python的参考实现

CPython没有现成的JIT,但是您可以使用numba为CPython获得简单的JIT

此外,至少有一种Python语言的实现是JIT现成的:Pypy

(JIT将字节码转换为机器码以提高性能)

假设每个字节码指令由一个操作码和零个或多个操作数组成。有固定的一小组操作码和(通常)相当大的一组操作数

对于每个不同的操作码,VM的源代码都有一些实现该操作码的代码。所有的源代码都被编译成机器代码。因此,在VM的机器代码中,每个操作码都有机器代码

当CPU执行VM的机器代码时,VM通过查看其操作码,然后切换/跳转到实现该操作码的机器代码块,并将操作数传递给它,从而重复执行下一条字节码指令

在这个过程中,没有任何一点是将整个字节码指令翻译成等效的机器代码,所以两个“流”都不正确

当Python文档说VM“执行对应于每个字节码的机器代码”时,这有点不精确。只有CPU执行机器代码。具体而言,CPU在执行VM的机器代码时,将执行与输入字节码中出现的每个操作码对应的机器代码

相关问题 更多 >