执行模型变体——执行优化工具——Psyco: 初始的 just-in-time 编译器

未匹配的标注

Psyco 系统并不是另一种 Python 实现,而是扩展字节码执行模型以加速程序运行的一个组件。当前,Psyco 已经有些是过时项目了:它仍然可以独立下载,但随着 Python 的演变已经过时,且不再被积极维护。作为替代,它的理念已经整合进入之前描述过的更完整的 PyPy 系统。然而,Psyco 探索出的理念的持续重要性使得它们值得快速了解一下。

根据图 2-2, Psyco 是 PVM 的一个增强版,它在程序运行时收集并使用类型信息来把部分的程序字节码彻底翻译为真正的二进制机器码以更快执行。Psyco 无需代码的修改或开发中一个单独的编译步骤,就完成了这个翻译。

大体上,当程序运行时,Psyco 收集关于正在被传递的对象种类的信息;这个信息能被用来产生为那些对象类型定制的高效机器码。一旦产生后,机器码就替换原始字节码的对应部分来加速程序整体执行。结果是使用 Psyco,程序的运行速度会变得越来越快。在理想案例中,在 Psyco 下的一些 Python 代码可能变得和编译好的 C 代码一样快。

因为这个从字节码的翻译发生在程序运行时,Psyco 被称为一种 just-in-time 编译器。 然而,Psyco 不同于一些读者可能已经在 Java 语言中见过的 JIT 编译器。事实上,Psyco 是一个专门化的 JIT 编译器——它根据程序真实使用的数据类型来产生对应的机器码。比如,如果程序的一部分在不同时刻使用不同的数据类型,Psyco 可能会产生不同版本的机器码来支持不同的类型组合。

Psyco 被证明可以极大地加速某些 Python 代码。根据它的网页,Psyco 提供了“2 到 100 倍的加速,通常是 4 倍,不修改 Python 解释器和源码,只是一个动态的可加载的 C 扩展模块。” 同样重要的,用纯 Python 编写的算法代码实现了最大程度的加速——这恰恰可能是你通常迁移到 C 去优化的那种代码。要了解关于 Psyco 的更多信息,可以搜索网络或者看一下它的继任者——之前描述过的 PyPy 项目。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~