Meandering Trajectory

아니 Go의 상태가… 본문

컴퓨터/GoLang

아니 Go의 상태가…

latentis 2017. 8. 12. 11:10

BMT 즉 BenchMark Test는 업계에서 흔히 자주 언급되는 용어다. 제품 선정 전에 성능 검증을 위해 종종 수행되는데 수행하는 과정이 고통스러워 되도록이면 피하고 싶은 작업이다. 하지만 일과 관계없는 벤치마크는 항상 흥미진진하다.

다양한 언어에 대해 성능 테스트 결과가 올라와 있는 사이트가 있다. Computer Language Benchmarks Game이라는 사이트인데 Go를 한창 배우고 Go 코드도 많이 읽고 있는 터라 이 사이트를 살펴봤다. Go도 GC를 가진 언어고 Java도 GC를 가진 언어이니 이 둘을 비교하는 것이 재미있을 것 같아 이 둘을 비교한 페이지를 클릭한 순간,

이럴수가… Go의 상태가 이게…

binary-trees
source  secs    mem     gz  cpu     cpu load
Go      34.77   269,068 654 132.04  95% 97% 95% 95%
Java    11.26   593,156 835 39.02   85% 88% 90% 88%

몇몇 테스트는 Go가 앞서지만 전체적으로 Go의 성능이 떨어지는데 binary-trees가 그 중 가장 느리다.

도대체 저 테스트가 뭘까 살펴보니 테스트에 대한 설명이 이렇다.

Background
A simplistic adaptation of Hans Boehm's GCBench, which in turn was adapted from
a benchmark by John Ellis and Pete Kovac. Thanks to Christophe Troestler and 
Einar Karttunen for help with this benchmark.

Hans Boehm GC라고 C/C++에서 사용 가능한 GC 라이브러리가 있다. 그 라이브러리에 포함되어 있는 성능 테스트에서 가져온 것이라는 얘기. 그러면 이 테스트에서 Go의 성능이 저렇게 떨어지는 이유는 GC 알고리듬에 문제가 있다는 얘긴건가.

이 테스트의 전체 순위를 보면 Go는 Smalltalk보다 느리다. ㅡ.ㅡ;;; 그리고 C++에 비해 15배 느리다. 한편 Rust의 성능은 아주 인상적이다. C/C++을 제외한 나머지 언어 중에 가장 빠르다.

Go에서는 자꾸 뭔가 안 좋은 인상을 받고 Rust에 끌리고 있다.

하지만 Go에는 나름의 장점이 있다. GC야 시간이 지나면 나아지겠지…

'컴퓨터 > GoLang' 카테고리의 다른 글

Go 언어: 빈 슬라이스와 nil  (0) 2017.10.20
클로저(Closure)와 데코레이터(Decorator) 패턴  (0) 2017.08.14
Go 채널  (0) 2017.08.09
Go: 리플렉션 #2  (0) 2017.07.16
Go: 리플렉션 #1  (0) 2017.07.15
Comments