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)

相关推荐