python、java、c、go执行速度对比 |
您所在的位置:网站首页 › surfacego2和go3的速度对比 › python、java、c、go执行速度对比 |
闲来无事,我对java、c、python、go的运算速度做了对比,执行的基准代码是: python版本 NUM = 111181111 # 这是素数, 因此在循环结束前不会退出 def is_prime(n): i = 2 while i < n: if n % i == 0: return False i += 1 return True if __name__ == '__main__': is_prime(NUM)测试的方式是使用linux的time命令,时间统一用total统计,比如统计go语言执行时间的命令如下: ➜ Desktop time ./speed ./speed 1.01s user 0.02s system 97% cpu 1.048 total统计java如下: ➜ src git:(master) ✗ time java eg.Speed java eg.Speed 1.14s user 0.05s system 95% cpu 1.256 total最终结果统计如下: 语言 执行时间(total)秒 python 2.7.13 11.256 python 3.7.0 11.462 java 1.8.0_121 HotSpot 1.256 c (Apple LLVM version 10.0.0): gcc prime.c后 1.069 c 优化编译: gcc -O3 prime.c后 0.005 go 1.8.1 1.048 结论优化编译的c超级快, go和普通编译的c其次,java再略慢,python2与python3速度差不多,但比前面三种语言慢10倍。原因我也查了一下, 简单来说是因为2点:1. Python等动态类型语言,在执行每一个简单的操作时都需要大量的指令才能完成(包括做类型判断,不同类型找出各自的方法,执行不同的指令); 2. C语言和Python的数据结构和算法不同. 另:听青南安利说用rust可能更快,鉴于没写过rust,因此就不实验了。 其他几个代码的版本如下:java版本 package eg; public class Speed { static final long NUM = 111181111L; public boolean isPrime(long n) { long i = 2L; while (i < n) { if (n % i == 0) { return false; } i += 1; } return true; } public static void main(String[] args) { Speed s = new Speed(); s.isPrime(NUM); } }c版本 int is_prime(long n) { long i = 2L; while (i < n) { if (n % i == 0) { return 0; } i += 1; } return 1; } int main() { const long NUM = 111181111L; is_prime(NUM); }go版本 package main func is_prime(n int) bool { /* 声明局部变量 */ var i = 2 for i < n { if n % i == 0 { return false } i++ } return true } func main() { const NUM int = 111181111 is_prime(NUM) } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |