美文网首页
python、java、c、go执行速度对比

python、java、c、go执行速度对比

作者: ThomasYoungK | 来源:发表于2019-01-01 23:38 被阅读82次

    闲来无事,我对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) 1.069
    go 1.8.1 1.048

    结论

    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)
    }
    

    相关文章

      网友评论

          本文标题:python、java、c、go执行速度对比

          本文链接:https://www.haomeiwen.com/subject/uizolqtx.html