Python比Java/C慢吗?

2024-05-16 03:40:57 发布

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

3条回答

问Python为什么比Java/C慢是不正确的。Java有多快?好吧,天真的解释器比优化的编译器慢10倍左右。我相信有一个用JavaScript编写的Java bytcode解释器——可能不是很快。因此,预期的问题似乎是“为什么CPython语言系统比Sun、IBM和Oracle JRE以及Microsoft.NET运行时的速度慢?”

我相信正确的答案是非技术性的。最快的Java和.NET运行时更快,因为它们有大型全职技术团队在性能竞争环境中开发。

动态语言系统易于实现。任何白痴都能做到。我有。静态语言系统的设计和实现更为复杂。一个简单的静态系统往往比等效的动态系统运行得快得多。然而,高度优化的动态系统几乎可以同样快地运行。我知道有些Smalltalk实现非常好。开发的动态系统的一个经常引用的例子是MIT Lisp Machine

另外,如果真正的grunt是由库代码完成的,那么语言系统可能无关紧要。或者,语言可以鼓励(或者给时间(!)开发更有效的算法,可以轻松消除恒定因素的性能差异。

如其他答案中所述,这取决于运行时系统以及手头的任务。因此,标准(C)Python并不一定比Java或C慢。它的一些模块是用C语言实现的,因此将anative实现的速度与Python语言结合起来。

我们做了一个小实验:我们比较了不同语言中阶乘计算的执行时间。该测试实际上是为了评估任意精度整数实现的性能。

testee. language arbitrary-precision integers run-time

     1. Java     java.math.BigInteger         JRE 6.13
     2. .NET     System.Numerics.BigInteger   MS CLR 4.0
     3. Python   long                         Active Python 2.6.2.2
     4. Squeak   BigInt                       Squeak 3.10.2
     5. .NET     Mono.Math.BigInteger         MS CLR 4.0

results:

                 1)         2)       3)       4)        5)
   10.000!      343 ms    137 ms    91 ms  1.200 ms    169 ms
   20.000!    1.480 ms    569 ms   372 ms  1.457 ms    701 ms
   30.000!    3.424 ms  1.243 ms   836 ms  3.360 ms  1.675 ms
   40.000!    6.340 ms  2.101 ms 1.975 ms  6.738 ms  3.042 ms
   50.000!   10.493 ms  3.763 ms 3.658 ms 10.019 ms  5.242 ms
   60.000!   15.586 ms  7.683 ms 5.788 ms 14.241 ms 10.000 ms

alt text http://www.mycsharp.de/wbb2/attachment.php?attachmentid=6909&sid=0d5aa62b522d005d9e7089785b5d19f1

条形图显示结果。Python显然是赢家。据我所知,Python使用Karatsuba-algorithm来乘法大整数,这解释了速度。

此外,Python的“任意精度整数”类型是内置的long。因此,您甚至不需要Java的biginger类所需的特殊类型处理。

不要把语言和运行时混为一谈。

Python(该语言)有许多运行时实现。

  • CPython通常是解释的,并且比本机代码C#慢。它可能比Java慢,这取决于Java JIT编译器。

  • JYthon在JVM中进行解释,并具有与Java相同的性能配置文件。

  • IronPython依赖于与C#相同的.NET库和IL,因此性能差异相对较小。

  • Python可以通过PyREX、PyToC和其他方法转换为本机代码。在这种情况下,它通常会执行以及C++。在某种程度上,您可以进一步优化C++,也许比PyRX的未优化输出挤出一点点更好的性能。

    有关详细信息,请参见http://arcriley.blogspot.com/2009/03/so-long-pyrex.html

请注意,Python(语言)并不慢。一些Python运行时间(例如,CPython)将比本地代码C++慢。

相关问题 更多 >