python竟然比go快这么多?
测了一下c、python、go的性能
目前发现 c第一,python第二,go第三
测试功能:求前100000中素数有哪些,个数多少
以下是测试的花费时间,go竟然最慢
c :1.25s
python: 1.36s
go: 3.6s
go咋会第三?有没有人帮我优化下。。。
python当然还有其他优化方案,这里用的numba,兼容性差,用的时候莫名其妙很多错误。可以用pypy,当然还可以用nuitka编译为二进制,不过bumba是最快的。
用cpython,要30多秒,python优化后:
用nuitka好像只要几秒大概8、9秒。
用pypy大概4.5秒左右。
用numba才1.36秒。
numba居然这么快,要是兼容性更高点就无敌了。
惊喜的是:main函数中的哪些代码,居然可以用github copilot 完成,只需要按tab,回车,就可以完成。。
想想也太可怕了
c代码如下:
#include <stdio.h>#include <stdint.h>#include <sys/time.h>int is_prime(long n) { long i = 2L; while (i < n) { if (n % i == 0) { return 0; } i += 1; } return 1;}uint64_t elapsed(struct timeval start, struct timeval end) { return (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_usec - start.tv_usec);}int main() { int prime_num = 0; struct timeval start, end; gettimeofday(&start, 0); for (long i = 0; i < 100000; i ++) { if (is_prime(i)) { prime_num += 1; } } gettimeofday(&end, 0); uint64_t elapsed_time = elapsed(start, end); printf('time cost:%fs, prime_num:%ld\n', elapsed_time/1000000.0, prime_num); return 0;}
python代码如下:
#-*-coding:utf-8-*-import timeimport numba@numba.jitdef is_prime(n): i = 2 while i < n: if n % i == 0: return False i += 1 return Truedef test(): prime_num = 0 t1 = time.clock() for i in range(2, 100000): if is_prime(i): prime_num += 1 t2 = time.clock() print ('time cost:{}s, prime_num:{}'.format(t2-t1, prime_num))if __name__ == '__main__': test()
go代码如下:
package mainimport ('fmt''time')func is_prime(n int) bool {var i = 2for i < n {if n%i == 0 {return false}i++}return true}func main() {t1 := time.Now()prime_num := 0count := 100000fori := 0; i < count; i++ {if is_prime(i) {prime_num++}}t2 := time.Since(t1)fmt.Println('time cost:', t2, 'prime_num:', prime_num)}
赞 (0)