Gau*_*war -2 c c++ python 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)))
Run Code Online (Sandbox Code Playgroud)
程序耗时5.204254150390625秒.
C代码:
#include<stdio.h>
int main()
{
for( int i = 0 ; i < 1000000 ; ++i )
printf("%d\n", i);
}
Run Code Online (Sandbox Code Playgroud)
所用时间:8.582秒.
C++代码:
#include<iostream>
using namespace std;
int main()
{
for( int i = 0 ; i < 1000000 ; ++i)
cout<<i<<endl;
}
Run Code Online (Sandbox Code Playgroud)
所用时间:8.778秒.
当我运行时:
import time
start = time.time()
print(*range(1000000))
time_taken = time.time() - start
print(("Program took %s seconds." % (time_taken)))
Run Code Online (Sandbox Code Playgroud)
程序耗时60.77405118942261秒.
python的内置函数如何比程序的简单版本更慢?
除了最后一种情况(见下文),您在此测试中的时间基本上是您正在使用的控制台应用程序,而不是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
Run Code Online (Sandbox Code Playgroud)
你的上一个Python示例如此之慢的原因是你曾经习惯于*range(1000000)将生成器显式展开为一百万个参数print.这迫使Python创建了大量的列表,并没有针对特定情况进行优化.最好使用生成器来生成.
我怀疑初始Python时序和C时序之间的差异是测试方法的假象.第一个使用Python来测量时间,这意味着它测量从程序启动到Python完成将数据发送到控制台的时间.但是,您可能会使用该time命令为C程序计时,这意味着您正在测量最后一行实际输出到控制台的时间.由于涉及较大的内核缓冲区,因此差异将非常大.尝试使用time两个程序的时间; 当我这样做时,差异就消失了.
| 归档时间: |
|
| 查看次数: |
207 次 |
| 最近记录: |