golang은 정말 빠른걸까?
golang은 컴파일 되어 바이너리 형태로 실행되기 때문에 java처럼 가상머신에서 동작하는 언어보다 당연히 빠를꺼라고 생각을 했다.
그런데 얼마전 stackoverflow에 java와 golang을 비교 했는데, golang이 느리다는 것이다.
테스트는 이렇다. 임의로 큰 float64 타입의 배열을 생성 후에, 랜덤값을 배열을 모두 채운다.
그리고 생성한 배열을 API에서 제공하는 정렬 기능으로 배열을 정렬하고 시간을 비교하는 것이다.
golang
package main
import (
"fmt"
"math/rand"
"sort"
"time"
)
func main() {
fmt.Println("Starting")
const x = 1000000
const y = x * 10
var s [y]float64
s1 := rand.NewSource(time.Now().UnixNano())
r1 := rand.New(s1)
start1 := time.Now()
for i := 0; i < y; i++ {
s[i] = r1.Float64()
}
end1 := time.Since(start1)
ss := s[:]
start2 := time.Now()
sort.Float64s(ss)
end2 := time.Since(start2)
fmt.Println(end1)
fmt.Println(end2)
fmt.Println("Number: ", ss[x])
}
java
import java.util.*;
class RSTest {
public static void main(String[] args) {
System.out.println("Starting");
int x = 1000000;
int y = x * 10;
Random gen = new Random(System.currentTimeMillis());
double[] s = new double[y];
long start1 = System.nanoTime();
for (int i = 0; i < y; i++) {
s[i] = gen.nextDouble();
}
long end1 = System.nanoTime();
long start2 = System.nanoTime();
Arrays.sort(s);
long end2 = System.nanoTime();
System.out.println((end1 - start1) / (1000000000.0));
System.out.println((end2 - start2) / (1000000000.0));
System.out.println(s[x]);
}
}
테스트 결과는 java가 매우 빠르다이다.
java
0.3590694
1.6030528
0.10000905418967532
go
233.1957ms
5.4633992s
Number: 0.10002801819954663
단순 비교를 통해 언어의 우위는 의미가 없다고 생각한다. 다만 가상머신에서 동작하는 java라고 느리다는 편견는 갖지 말아야 겠다.