python如何比C和C ++运行得更快?

时间:2017-03-14 17:21:02

标签: python c++ c performance performance-testing

我制作了简单的程序,只在屏幕上打印了100万个数字,python花了大约5.2秒。 我认为C和C ++应该更快,但每次运行都需要大约8秒。它们如何比python慢​​?

python代码:

import time

start = time.time()

i = 0
while i < 1000000:
    print(i)
    i += 1

time_taken = time.time() - start
print(("Program took %s seconds." % (time_taken)))
  

程序耗时5.204254150390625秒。

C代码:

#include<stdio.h>

int main()
{
    for( int i = 0 ; i < 1000000 ; ++i )
        printf("%d\n", i);
}
  

所花费的时间:8.582秒。

C ++代码:

#include<iostream>

using namespace std;

int main()
{
    for( int i = 0 ; i < 1000000 ; ++i)
    cout<<i<<endl;
}
  

所花费的时间:8.778秒。

当我跑这个时:

import time

start = time.time()

print(*range(1000000))

time_taken = time.time() - start
print(("Program took %s seconds." % (time_taken)))
  

程序耗时60.77405118942261秒。

如果python的内置函数比普通版本的程序运行得慢?

1 个答案:

答案 0 :(得分:6)

除了最后一种情况(见下文)之外,您在此测试中的时间基本上是您正在使用的控制台应用程序,而不是C / C ++ / Python程序本身。

If you redirect the output, you'll find a huge difference:

$ time ./loop >/dev/null

real    0m0.096s
user    0m0.092s
sys     0m0.004s

$ time ./loop >/tmp/million.txt
 time ./loop >/tmp/million.txt

real    0m0.116s
user    0m0.078s
sys     0m0.019s

$ time ./loop
0
1
# ...Many lines of output not included
999998
999999

real    0m6.465s
user    0m0.202s
sys     0m0.708s

您的上一个Python示例如此之慢的原因是您使用*range(1000000)将生成器显式展开为一百万个参数print。这迫使Python创建了大量的列表,并没有针对该特定情况进行优化。使用生成器来生成它会更好。

我怀疑初始Python时序和C时序之间的差异是测试方法的假象。第一个使用Python来测量时间,这意味着它测量从程序启动到Python完成将数据发送到控制台的时间。但是,您可能使用time命令为C程序计时,这意味着您正在测量最后一行实际输出到控制台的时间。由于涉及较大的内核缓冲区,因此差异将非常大。尝试使用time为两个程序计时;当我这样做时,差异消失了。