golang은 정말 빠른걸까?

in go •  6 years ago 

golang은 컴파일 되어 바이너리 형태로 실행되기 때문에 java처럼 가상머신에서 동작하는 언어보다 당연히 빠를꺼라고 생각을 했다.

그런데 얼마전 stackoverflow에 java와 golang을 비교 했는데, golang이 느리다는 것이다.

https://stackoverflow.com/questions/55263220/why-is-my-go-array-sorting-code-much-slower-than-java?fbclid=IwAR36BAYDzjwIRz9huWINmufbTeXZKFlz3OQKNXDAbsoscgQbGzATU5ckwC0

테스트는 이렇다. 임의로 큰 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라고 느리다는 편견는 갖지 말아야 겠다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!