Java Go python 運作速度對比
系統環境
System: CentOS Linux release 7.7.1908
Memory: 2G
CPU: 1 * Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz
Java: 1.8.0_131
Python: Python 3.7.3
Golang: go1.13.3 linux/amd64
測試方法
選用常用的冒泡排序分别使用三種語言進行1億次排序,然後對比排序的最終時間。
Java
先使用 javac 編譯 Speed.java 檔案得到 Speed 位元組碼檔案然後使用 time 指令計算程式運作的時間time java Speed
代碼
public class Speed {
public static void main(String[] args) {
int num = 1000000000;
long start = System.currentTimeMillis();
for (int i = 0; i < num; i++) {
bubbleSort(1, 2, 3, 4, 5, 6, 7, 8, 9);
}
System.out.println(System.currentTimeMillis() - start);
}
public static void bubbleSort(int... arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] < arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
運作結果
java Speed 4.62s user 0.05s system 97% cpu 4.776 total
Golang
先編譯 Golang 源檔案 go build 然後運作編譯後的檔案 time ./speed
package main
import (
"fmt"
"time"
)
func bubbleSort(arr []int) {
for j := 0; j < len(arr)-1; j++ {
for k := 0; k < len(arr)-1-j; k++ {
if arr[k] < arr[k+1] {
temp := arr[k]
arr[k] = arr[k+1]
arr[k+1] = temp
}
}
}
}
func main() {
const NUM int = 1000000000
var arr []int
start := time.Now().UnixNano()
for i := 0; i < NUM; i++ {
arr = []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
bubbleSort(arr)
}
fmt.Println((time.Now().UnixNano() - start) / 1e6)
}
運作結果
./speed 9.23s user 0.09s system 51% cpu 18.143 total
Python
直接使用 time 指令計算程式運作的時間time Python speed.py
代碼
# coding:utf-8
import time
def bubble_sort(arr):
for i in range(len(arr)):
for j in range(len(arr) - 1 - i):
if arr[j] < arr[j + 1]:
temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
if __name__ == "__main__":
NUM = 100000000
data = []
s = time.clock()
for k in range(NUM):
data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
bubble_sort(data)
print(int((time.clock() - s) * 1000))
運作結果
python speed.py 1722.12s user 2.75s system 98% cpu 29:19.88 total
測試結果
Python
Golang
Java
1722.12s
9.23s
4.62s
總結
測試結果有點出乎意料,Python 的速度也太慢了吧。不過 Java 比 Golang 還要快一倍左右更出乎意料,也可能測試的緯度太過局限,沒有網絡io和磁盤io等其他方面的對比。其實程式設計語言的速度并非是衡量一種語言優劣的唯一标準,每種語言都有自己擅長的領域,不過程式的優劣和coder也有很大關系。