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 #include #include 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 = 2 for i < n { if n%i == 0 { return false } i++ } return true}func main() { t1 := time。Now() prime_num := 0 count := 100000 fori := 0; i < count; i++ { if is_prime(i) { prime_num++ } } t2 := time。Since(t1) fmt。Println(“time cost:”, t2, “prime_num:”, prime_num)}