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

sta*_*tar -1 python interpreter bytecode virtual-machine

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

\n

python 文档字节码状态如下\n \n这个 \xe2\x80\x9c 中间语言\xe2\x80\x9d 据说在执行与每个字节码对应的机器代码的虚拟机上运行。

\n

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

\n

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

\n
    \n
  1. 字节码由VM转换为机器码,VM执行机器码?CPU 做了什么,那么它是否空闲?

    \n
  2. \n
  3. 字节码由VM转换为机器码,VM将机器码发送给CPU执行?

    \n
  4. \n
\n

Mic*_*yck 7

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

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

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

在此过程中,整个字节码指令都不会转换为等效的机器代码,因此您的“流程”都不正确。

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