Python,Java和C中的嵌套循环比较

Emi*_*mil 4 c python java performance

python中的以下代码需要很长时间才能运行.(我不能等到节目结束,虽然我的朋友告诉我他花了20分钟.)

但Java中的等效代码大约在8秒内运行,在C中则需要45秒.

我预计Python会很慢但不是很多,而在C的情况下,我希望比Java更快,实际上速度更慢.JVM是否使用一些循环展开技术来实现这种速度?Python有这么慢的原因吗?

import time
st=time.time()
for i in xrange(0,100000):
    for j in xrange(0,100000):
        continue;
print "Time taken : ",time.time()-st
Run Code Online (Sandbox Code Playgroud)

Car*_*icz 12

你的测试没有衡量有意义的东西.

语言在现实世界中的表现与它执行紧密循环的速度没有多大关系.

坦率地说,我很感兴趣C和Java花了他们的时间; 我希望他们的两个编译器都能意识到内部循环中没有发生任何事情,并且已经将它们优化为不存在(和0秒).

另一方面,Python仍然被解释(我可能错了).在任何情况下,看起来外部循环需要构造100,000个xrange对象来运行空的内部循环,并且这不太可能被优化掉.

所以你真正测量的是各种编译器能够看到没有真正的计算工作正在进行的事实.


Aar*_*lla 9

经验教训是:性能绝不是您所期望的.因此,总是衡量,永远不要相信.

您可能会看到这些数字的一些原因(从第一句开始,其中一些可能完全错误):

C编译为"i586"处理器(也称为Pentium).那个CPU从1993年卖到2000年左右.你最近见过一个吗?可能不会.所以C代码并没有真正优化你的CPU可以做什么(或者换一种说法:今天的CPU很难成为一个快速的奔腾CPU).Java,OTOH,在加载代码时为您的CPU编译.它可以拉出C根本无法做到的一些技巧.价格是C程序在15ms开始,而Java程序需要4秒.

Python has no JIT (just in time compiler), yet. All code is converted into bytecode which is then interpreted. This means the loop above is turned into a dozen bytecode instructions which are then interpreted by a C program. That just takes time. Python is not meant for huge loops, it's meant for smart algorithms which you simply can't express in any other language (at least not with the same amount of code and readability).

So just as it doesn't make sense to go shopping with a 18t truck (you can transport anything but you won't find a space to park it), chose your programming language according to the problem you need to solve. It has to be small&fast? C. Just fast? Java. Flexible? Python. Flexible&Fast: Python with a helper library in C (like NumPy).


S.L*_*ott 5

Python有这么慢的原因吗?

是.

但这有什么关系呢?您已经创建了100,000个xrange对象.为什么?那有什么关系?你对表现的真正问题是什么?你实际上有什么算法实际上太慢了?


for i in xrange(0,100000): # Creates one xrange object
    for j in xrange(0,100000): # Creates a fresh xrange object each time through the loop
Run Code Online (Sandbox Code Playgroud)