Python的运行速度比C和C 更快
How is python running faster than C and C++?
我制作了简单的程序,该程序只在屏幕上打印了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("%dn", 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内置功能的工作方式比程序的琐碎版本慢?
除了最后一个情况(见下文),此测试中的时间基本上是您正在使用的控制台应用程序,而不是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
时间来计时两个程序;当我这样做时,差异消失了。
相关文章:
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 媒体基金会:WavSink以比实时消耗率更快的速度处理音频-是否可以实时限制后台处理
- 循环速度更快,有固定限制
- 循环降低到0的速度更快
- JIT 编译的运行速度能否比编译时模板实例化更快?
- Python的运行速度比C和C 更快
- OpenGL 计算着色器分离循环的速度更快
- OpenCV Mat对象复制速度更快
- 计算速度 /使程序更快
- 如果我用代码块编译代码,为什么我的代码运行速度更快
- 为什么windows第一次打开文件的速度这么慢,有没有更快的方法
- 将数据保存在std :: vector或.txt文件中的速度更快
- Programm 在图形外壳中的工作速度比在命令外壳中更快
- 线程加载图像的速度更快,直到它们在Studio中消失
- std::map::erase()-重载速度更快
- 重复发送http请求,速度更快(异步模式)
- 在科学记数法中将双精度转换为字符串的速度比在 c++ 中将 sprintf 转换得更快
- C++码速度,速度更快
- 是带有 RAX/EAX/AX/AL/AH 寄存器作为目的地的携带速度更快的补充
- 是否有一个 GNU C 编译器选项可以生成运行速度更快但精度低于默认设置的浮点程序