测了一下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代码如下:
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)} |
|
来自: 菌心说 > 《编程+、计算机、信息技术》