当前位置: 首页 > 科技观察

为什么PyPy让Python比C更快?了解一篇文章的内在机制

时间:2023-03-12 09:21:55 科技观察

对于研究人员快速整理想法并查看它们是否有效至关重要。Python在这方面是一门很棒的语言,它允许人们专注于想法本身,而不用担心代码格式化等琐碎的事情。但是,Python有一个致命的缺点:它比C、C++等语言慢很多。那么,在构建了一个Python原型来测试一个想法之后,您如何将它变成一个快速且高性能的工具呢?通常,还有一个步骤:手动将Python代码翻译成C语言代码。但如果Python原型本身可以运行得非常快,那么转换代码所花费的时间就可以做一些更有意义的事情。而PyPy正好可以解决这个问题。它使Python代码比C运行得更快。)-start}s")为了证明PyPy使用默认的Python解释器和PyPy运行上面的代码,执行一个将整数0递增到100,000,000的循环,并打印出经过的时间。结果如下:RuntimePythonvsPyPy这不是学术意义上的评测,但结果是惊人的。PyPy仅需0.22秒即可完成执行,而默认的Python解释器大约需要10秒。您可以将Python代码直接放在PyPy上,无需进行任何更改。在同一台计算机上,等效的C语言实现需要0.32秒,PyPy甚至击败了最快的C语言。为什么PyPy这么快?尽管代码相同,但代码的执行方式却大不相同。PyPy提高速度的秘诀是“即时编译”或JIT编译。提前编译C、C++、Swift、Haskell、Rust等编程语言通常会提前编译(AOT编译)。这意味着在用这些语言编写代码后,编译器将源代码转换为特定计算机体系结构可读的机器代码。也就是说,当程序执行时,执行的不是原来的源代码,而是机器码。Ahead-of-timecompilation将源代码转换为机器码解释型语言不同于上述C语言,Python、JavaScript、PHP等语言使用了另一种方法——解释型语言.与将源代码转换为机器代码相反,源代码在解释过程中保持不变。每次运行程序时,解释器都会逐行查看代码并运行它。例如,每个Web浏览器都有一个内置的JavaScript解释器。解释器逐行运行程序即时编译PyPy使用即时编译来执行Python代码。也就是说,PyPy不同于解释器,它不是逐行运行代码,而是先将部分代码编译成机器码,然后再执行程序。JIT编译如上图结合了早期编译和解释,而PyPy使用的JIT编译是解释和早期编译的结合,可以利用早期编译来提高性能,提高解释型语言的灵活性和跨平台可用性.原文链接:https://towardsdatascience.com/run-your-python-code-as-fast-as-c-4ae49935a826(id:almosthuman2014)》]点此阅读作者更多好文