python、java、c、go執(zhí)行速度對比

閑來無事,我對java、c、python、go的運算速度做了對比,執(zhí)行的基準代碼是:

python版本

NUM = 111181111   # 這是素數(shù), 因此在循環(huán)結束前不會退出

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命令,時間統(tǒng)一用total統(tǒng)計,比如統(tǒng)計go語言執(zhí)行時間的命令如下:

?  Desktop time ./speed
./speed  1.01s user 0.02s system 97% cpu 1.048 total

統(tǒng)計java如下:

?  src git:(master) ? time java eg.Speed
java eg.Speed  1.14s user 0.05s system 95% cpu 1.256 total

最終結果統(tǒng)計如下:

語言 執(zhí)行時間(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): gcc prime.c后 1.069
c 優(yōu)化編譯: gcc -O3 prime.c后 0.005
go 1.8.1 1.048

結論

優(yōu)化編譯的c超級快, go和普通編譯的c其次,java再略慢,python2與python3速度差不多,但比前面三種語言慢10倍。原因我也查了一下, 簡單來說是因為2點:1. Python等動態(tài)類型語言,在執(zhí)行每一個簡單的操作時都需要大量的指令才能完成(包括做類型判斷,不同類型找出各自的方法,執(zhí)行不同的指令); 2. C語言和Python的數(shù)據(jù)結構和算法不同.

:聽青南安利說用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)
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容