Go가 자바에 비해 느린 이유는 무엇입니까?


109

2010 년 컴퓨터 언어 벤치 마크 게임 에서 볼 수 있듯이 :

  • Go는 C 보다 평균 10 배 느립니다.
  • Go는 Java 보다 3 배 느립니다 !?

Go 컴파일러가 실행을위한 네이티브 코드를 생성한다는 점을 염두에두고 어떻게 이럴 수 있습니까?
Go 용 미성숙 컴파일러? 아니면 Go 언어에 내재적 인 문제가 있습니까?

편집 :
대부분의 답변은 문제가 미성숙 한 컴파일러에 있다고 주장하면서 Go 언어의 본질적인 속도를 거부합니다.
따라서 피보나치 수를 계산하기위한 몇 가지 테스트 수행 했습니다 . 반복 알고리즘은 Go (freebsd, 6g) same에서 C (O3 옵션 사용)와 같은 속도로 실행됩니다. 지루한 재귀는 Go 2 times에서 C보다 느리게 실행됩니다 (-O3 옵션 사용, -O0 사용-동일). 하지만 벤치 마크 게임 에서처럼 10 배가 떨어지는 것을 보지 못했습니다.


36
공정하게 말하면 C는 가장 한 ASM이고 Java는 요즘 몇 가지 심각한 최적화 기능을 가지고 있습니다.
Matthew Scharley

16
아마도 벤치 마크가 Go의 강점을 반영하지 않을 수도 있습니다. 다른 벤치 마크가 실제로 이보다 빠를 수 있습니다. 게다가, 종종 성능이 아니라 코드의 가독성이 가장 중요합니다.
extraneon

7
@extraneon : 동의합니다. Go는 Google 용으로 설계되었으며 Google은 일상적으로 2 백만 개의 코어 에서 코드를 실행합니다 . 벤치 마크 게임은 4 개의 코어 만 사용한다고 생각합니다.
Jörg W Mittag

4
@extraneon : 일반적으로 동의하지만 Go는 "결과 프로그램이 비슷한 C 또는 C ++ 코드만큼 빠르게 실행됩니다."와 같이 속도를 염두에두고 특별히 설계되었습니다.
shosti

4
귀하의 질문은 너무 많이 가정합니다. "대부분의 답변은 Go languge의 본질적인 느린 속도를 거부합니다."는 질문에 사용하기에 잘못된 문구입니다. 물어볼 질문이나 진술이 있습니까? 오류를 이해 하려면 c2.com/cgi/wiki?HostileStudent 를 참조하십시오 .
Chris

답변:


102

6g 및 8g 컴파일러는 특별히 최적화하지 않으므로 생성하는 코드가 특별히 빠르지 않습니다.

그들은 스스로 빠르게 실행되고 괜찮은 코드를 생성하도록 설계되었습니다 (약간의 최적화가 있습니다). gccgoGCC의 기존 최적화 패스를 사용하고 C와 더 의미있는 비교를 제공 할 수 있지만 gccgo는 아직 기능이 완전하지 않습니다.

벤치 마크 수치는 거의 전적으로 구현 품질에 관한 것입니다. 구현시 벤치 마크에서 실제로 필요하지 않은 언어 기능을 지원하는 데 런타임을 소비하는 경우를 제외하고는 언어와 관련이 많지 않습니다. 대부분의 컴파일 된 언어에서 충분히 영리한 컴파일러는 이론상 필요하지 않은 것을 제거 할 수 있지만, 해당 언어의 실제 사용자가 해당 기능을 사용하지 않는 프로그램을 작성하는 경우가 거의 없기 때문에 데모를 리깅해야하는 시점이 있습니다. . 그것들을 완전히 제거하지 않고 이동 (예 : JIT 컴파일 된 Java에서 가상 호출 목적지 예측)하기가 까다로워지기 시작합니다.

FWIW, 나는 (기본적으로, 정수 첨가 루프) 그것에 살펴 본다 된 이동 내 자신의 아주 사소한 테스트의 범위의 빠른 끝으로 gccgo 생산 코드 gcc -O0gcc -O2동등한 C. 이동에 대한이 느린 본질적으로하지 않습니다 그러나 컴파일러는 아직 모든 작업을 수행하지 않습니다. 10 분 전의 언어로는 놀라운 일이 아닙니다.


7
또한 컴퓨터 언어 벤치 마크 게임의 Go 프로그램은 C 및 Java 프로그램만큼 최적화되지 않았을 수 있습니다.
el.pescado 2010

gcc -O0와 gcc -O3 사이에는 어떻습니까? 컴파일러가 "모든 것을 수행"하려는 의도조차 있습니까?
igouy 2010

@igouy : 글쎄요, gccgo가 가비지 수집을 할 의도가 있다고 확신하지만, 현재는 그렇지 않습니다. g 컴파일러에도 여전히 몇 가지 기능이 있습니다. 예를 들어 현재 호스트 스레드를 특히 잘 사용하지 않습니다 (특히 고 루틴 스케줄러는 선점 형이 아닙니다). 그 외에도 g 컴파일러가 치열하게 최적화 할 것인지 gccgo 만 할 것인지 Google의 계획을 알 수 없습니다.
Steve Jessop

1
@xitrium : Go의 의도는 구현이 협력 적으로 일정을 잡을 필요가 없어야하고 원하는 경우 선점 할 수 있다는 것입니다. 예를 들어 code.google.com/p/go/issues/detail?id=543을 참조하십시오. "무의미합니다.이 소위 버그를 수정하면 Go 언어 정의와 모순됩니다."로 닫히지 않았습니다. Go 구현은 선점하는 것이 금지되어 있습니다. :-) 실행 가능한 고 루틴 수에 관계없이 Go가 기본적으로 단일 호스트 스레드 만 사용했기 때문에 문제가 더욱 복잡해졌습니다.
Steve Jessop

6
현재로서는 답변이 약간 구식 일 수 있습니다. 최근에 Go 1.1의 첫 번째 베타가 출시되었으며 컴파일 된 프로그램의 성능이 약 30 %에서 40 %까지 증가한다고 말합니다. 누군가이 테스트를 다시 해주세요.
fuz

51

Go FAQ 의 다음 릴리스에서는 다음 과 유사한 내용이 표시됩니다.

공연

Go가 벤치 마크 X에서 성능이 떨어지는 이유는 무엇입니까?

Go의 디자인 목표 중 하나는 비교 가능한 프로그램에 대해 C의 성능에 접근하는 것이지만 일부 벤치 마크에서는 테스트 / 벤치의 여러 가지를 포함하여 매우 열악합니다. 가장 느린 것은 Go에서 비교할 수있는 성능 버전을 사용할 수없는 라이브러리에 따라 다릅니다. 예를 들어, pidigits는 다 정밀도 수학 패키지에 의존하고, C 버전은 Go와 달리 GMP (최적화 된 어셈블러로 작성 됨)를 사용합니다. 정규식 (예 : regex-dna)에 의존하는 벤치 마크는 기본적으로 Go의 stopgap regexp 패키지를 PCRE와 같이 성숙하고 고도로 최적화 된 정규식 라이브러리와 비교합니다.

벤치 마크 게임은 광범위한 조정으로 승리하며 대부분의 벤치 마크의 Go 버전은주의가 필요합니다. 비교 가능한 C 및 Go 프로그램을 측정하면 (역 보완이 하나의 예임)이 제품군이 나타내는 것보다 두 언어가 원시 성능에서 훨씬 더 가깝다는 것을 알 수 있습니다.

그래도 개선의 여지가 있습니다. 컴파일러는 좋지만 더 나을 수 있고 많은 라이브러리가 주요 성능 작업이 필요하며 가비지 수집기는 아직 충분히 빠르지 않습니다 (그렇다고하더라도 불필요한 가비지를 생성하지 않도록주의하면 큰 효과가있을 수 있습니다).

그리고 여기 최근 메일 링리스트 스레드에서 컴퓨터 벤치 마크 게임대한 자세한 내용 있습니다.

gccgo의 가비지 수집 및 성능 (1)

gccgo의 가비지 수집 및 성능 (2)

컴퓨터 벤치 마크 게임은 단순한 게임이라는 점에 유의하는 것이 중요합니다. 성능 측정 및 용량 계획에 대한 경험이있는 사람들은 실제 및 실제 워크로드와 마찬가지로 신중하게 일치합니다. 그들은 게임을하지 않습니다.


1
그리고 여기에 같은 스레드에서 몇 가지 세부 사항은 제외했다고 - groups.google.com/group/golang-nuts/msg/2e568d2888970308
igouy

3
그것은 "벤치 마크는 오지 그릇이다"고 유의해야 - 벤치 마크 게임으로 게시뿐만 아니라 벤치 마크 - shootout.alioth.debian.org/flawed-benchmarks.php
igouy

18
(그리고 모두가 ...) 물론 그것은이다 "게임" ,하지만 난 가서는 것을 볼 때 두 번 느린 벤치 마크에서 가장 빠른 것보다, 나의 첫 인상은 "와우, 이동이 빠른 것 같다" 내가 알고 있기 때문에 이러한 벤치 마크는, 결함이 있습니다. 반대로, 루비가 가장 빠른 것보다 65 배 느리다는 것을 보았을 때, 저는 "다음 동시 수치 집약적 노력에 루비를 사용하지 않을" 이라고 생각합니다 . 그래서 그것은 "게임"일지도 모르지만 당신이 그것을 소금 한 알과 함께 가져 가면 그것에 약간의 진실이 있습니다.
SyntaxT3rr0r

용량 계획에는 비용이라는 매우 중요한 측면이 있습니다. X 상자 또는 2 * X가 필요한지 여부는 결국 큰 차이를 만듭니다. 그리고 그 누구도 미래에 어떤 작업이 실행 될지 예측할 수 없기 때문에 가장 좋은 방법은 다양한 워크로드를 살펴 보는 것입니다. 몇 가지 구현을 확인한 결과 대부분 괜찮은 것으로 나타났습니다. 결과는 추정의 기초로 사용될 수 있다고 생각합니다.
Agoston Horvath

일반적으로 실제 시스템은 CPU가 아닌 IO에 의해 제한됩니다. 따라서 Go가 2 배인지 5 배인지에 관계없이 장애 조치,로드 밸런싱, 캐싱, 데이터베이스 토폴로지 등과 같은 용량 계획에 큰 차이가 없습니다. 이것이 YouTube 규모의 앱이 Python으로 많은 시스템을 실행할 수있는 이유입니다.
Sujoy Gupta 16. 9.

34

내 대답은 다른 모든 사람만큼 기술적이지는 않지만 여전히 관련이 있다고 생각합니다. Go 학습을 시작하기로 결정했을 때 Computer Benchmarks Game에서 동일한 벤치 마크를 보았습니다. 하지만 솔직히 이러한 모든 종합적인 벤치 마크는 Go가 당신에게 충분히 빠른지 결정하는 데 무의미하다고 생각합니다.

최근에 Tornado + TornadIO + ZMQ를 사용하여 Python으로 메시지 서버를 작성했으며 첫 Go 프로젝트에서 Go로 서버를 다시 작성하기로 결정했습니다. 지금까지 서버를 Python 버전과 동일한 기능으로 설정 한 결과, 테스트 결과 Go 프로그램에서 약 4.7 배 속도가 증가했습니다. 저는 Go로 1 주일 정도만 코딩했고 Python으로 5 년 넘게 코딩했습니다.

Go는 계속해서 작업할수록 더 빨라질 것입니다. 실제로는 작은 계산 벤치 마크가 아니라 실제 응용 프로그램에서 어떻게 수행되는지에 달려 있다고 생각합니다. 저에게 Go는 분명히 제가 Python으로 생성 할 수있는 것보다 더 효율적인 프로그램을 만들었습니다. 이것이이 질문에 대한 대답입니다.


3
Python보다 Go 코드를 작성하는 것이 얼마나 느릴 것이라고 생각하십니까?
Erik Engheim 2013

7
@AdamSmith-저는 Python을 7 년 이상 코딩하고 약간의 Go 만 코딩했기 때문에 Python보다 Go 코드를 더 느리게 작성할 것이라고 말하고 싶습니다. 그러나 Go와 다른 정적으로 형식화되고 컴파일 된 언어의 관점에서 볼 때 Go를 다른 것보다 더 빨리 작성할 것입니다. 개인적으로, C와 C ++ 사이의 속도로 파이썬의 단순성에 가장 가깝다고 느낍니다
jdi

5
비슷한 이야기가 있습니다. 방금 Go를 배우기 시작했고 Benchmarks Game에 따르면 Go는 JavaScript V8보다 느립니다. 바이너리 연산 집약적 인 내 프로그램은 고도로 최적화 된 V8 VM에서보다 최적화되지 않은 Go 코드로 10 배 더 빠르게 실행됩니다. Go는 많은 작업에서 C보다 느릴 수 있지만 C로 웹 사이트를 작성하는 사람은 아무도 없습니다. Go는 이미 완벽하게 실행 가능한 옵션이며 새로운 라이브러리, 프레임 워크 및 도구가 표시됨에 따라 개선 될 것입니다.
__name__이 None이면

1
@ user962247 이것은 미친 거짓 담요 진술입니다. 저는 수년간 Go를 작성해 왔으며 매우 빠르게 진행되고 있습니다. 가능한 모든 합성 벤치 마크에서 C / C ++ / Java를 능가 할 것이라고 주장하는 사람은 없습니다. 그러나 일부에서는 이깁니다 (벤치 마크 게임 사이트 참조). 실제로 수년 동안 프로덕션 Go 코드를 작성해온 사람에게서 가져옵니다. 빠르고 생산적입니다.
jdi


6

여러가지가 바뀌었다.

귀하의 질문에 대한 현재 정답은 진행 속도가 느리다는 개념에 이의를 제기하는 것입니다. 귀하의 문의 당시 귀하의 판단은 정당화되었지만 그 이후로 성능 측면에서 많은 근거를 얻었습니다. 지금은 여전히 ​​C만큼 빠르지는 않지만 일반적인 의미에서 10 배 정도 더 느린 곳은 아닙니다.

컴퓨터 언어 벤치 마크 게임

이 글을 쓰는 시점 :

source  secs    KB      gz      cpu     cpu load

reverse-complement
1.167x
Go      0.49    88,320  1278    0.84    30% 28% 98% 34%
C gcc   0.42    145,900 812     0.57    0% 26% 20% 100%

pidigits
1.21x
Go      2.10    8,084   603 2.10    0% 100% 1% 1%
C gcc   1.73    1,992   448 1.73    1% 100% 1% 0%

fasta
1.45x
Go      1.97    3,456   1344    5.76    76% 71% 74% 73%
C gcc   1.36    2,800   1993    5.26    96% 97% 100% 97%

regex-dna
1.64x
Go      3.89    369,380 1229    8.29    43% 53% 61% 82%
C gcc   2.43    339,000 2579    5.68    46% 70% 51% 72%

fannkuch-redux
1.72x
Go      15.59   952 900 62.08   100% 100% 100% 100%
C gcc   9.07    1,576   910 35.43   100% 99% 98% 94%

spectral-norm
2x
Go      3.96    2,412   548 15.73   99% 99% 100% 99%
C gcc   1.98    1,776   1139    7.87    99% 99% 100% 99%

n-body
2.27x
Go      21.73   952 1310    21.73   0% 100% 1% 2%
C gcc   9.56    1,000   1490    9.56    1% 100% 1% 1%

k-nucleotide
2.40x
Go      15.48   149,276 1582    54.68   88% 97% 90% 79%
C gcc   6.46    130,076 1500    17.06   51% 37% 89% 88%

mandelbrot
3.19x
Go      5.68    30,756  894 22.56   100% 100% 99% 99%
C gcc   1.78    29,792  911 7.03    100% 99% 99% 98%

그러나 이진 트리 벤치 마크에서는 잔인하게 고통받습니다.

binary-trees
12.16x
Go      39.88   361,208 688 152.12  96% 95% 96% 96%
C gcc   3.28    156,780 906 10.12   91% 77% 59% 83%

이제 Java와 동등하지만 Go가 Java보다 빠르도록 명시 적으로 만들어졌지만 동일한 작업 (서버 측 네트워킹 앱)에 사용되지 않았습니까?
MaxB

1
@MaxB 아니 그것은 자바보다 빠르다는 목표로 만들어지지 않았습니다. 좋은 성능, C ++보다 빠른 컴파일, 개발자의 생산성을 높이기 위해 더 쉽고 네이티브 동시성을 목표로 만들어졌습니다. 다른 언어의 런타임 속도를 능가하는 것은 추진 요인이 아닙니다.
jdi

5

CPU 사이클 사용에 대한 Go의 효율성은 좋지 않지만 Go 동시성 모델은 예를 들어 Java의 스레드 모델보다 훨씬 빠르며 C ++ 스레드 모델과 비교할 수 있습니다.

에 있습니다 스레드 링 벤치 마크 , 이동했다 16 배 빠른 자바보다. 동일한 시나리오에서 Go CSP는 C ++와 거의 비슷했지만 메모리를 4 배 더 적게 사용했습니다.

Go 언어의 가장 큰 힘은 70 년대에 Tony Hoare가 지정한 동시성 모델 인 Communicating Sequential Processes, CSP로, 구현이 간단하고 동시 요구 사항에 적합합니다.


2

Java가 Go 및 C ++보다 빠르며 대부분의 경우 C보다 빠를 수있는 두 가지 기본 이유가 있습니다.

1) JIT 컴파일러. 런타임 프로필을 기반으로 OO 클래스에서도 여러 수준을 통해 가상 함수 호출을 인라인 할 수 있습니다. 이것은 정적으로 컴파일 된 언어에서는 불가능합니다 (기록 된 프로필을 기반으로 한 최신 재 컴파일이 도움이 될 수 있음). 이것은 반복적 인 알고리즘을 포함하는 대부분의 벤치 마크에서 매우 중요합니다.

2) GC. GC 기반 메모리 할당은 malloc에 ​​비해 거의 무료입니다. 그리고 '무료'페널티는 전체 런타임에 걸쳐 상각 될 수 있습니다. 모든 가비지가 수집되기 전에 프로그램이 종료되기 때문에 종종 건너 뜁니다.

GC / JVM을 효율적으로 만드는 매우 재능있는 개발자가 수백 명 (수천?) 있습니다. "모든 것보다 더 잘 코딩"할 수 있다고 생각하는 것은 어리석은 일입니다. 그것은 인간의 자아 문제입니다. 인간은 재능있는 인간의 적절한 훈련을 받으면 컴퓨터가 그것을 프로그래밍 한 인간보다 더 잘 수행 될 것이라는 사실을 받아들이 기가 어렵습니다.

Btw, C ++는 OO 기능을 사용하지 않으면 C만큼 빠를 수 있지만 처음에는 C로 프로그래밍하는 데 매우 가깝습니다.

가장 중요한 것은 이러한 테스트의 "속도 차이"가 일반적으로 의미가 없다는 것입니다. IO 비용은 성능 차이보다 훨씬 더 많으므로 IO 비용을 최소화하는 적절한 설계는 통역 언어에서도 항상 승리합니다. CPU 바운드 시스템은 거의 없습니다.

마지막으로, 사람들은 "컴퓨터 언어 벤치 마크 게임"을 "과학적 측정"이라고합니다. 예를 들어 nbody에 대한 Java 테스트를 보면 테스트에 완전히 결함이 있습니다. 동일한 OS / 하드웨어에서 테스트를 실행하면 Java의 경우 약 7.6 초, C의 경우 4.7 초가 소요됩니다. 이는 합리적입니다. 테스트가보고하는 속도의 4 배가 아닙니다. 사이트 트래픽을 생성하도록 설계된 클릭 미끼, 가짜 뉴스입니다.

마지막으로 마지막 메모로 ... Go를 사용하여 테스트를 실행했는데 7.9 초였습니다. Go를 클릭하면 Java와 비교하고 Java를 클릭하면 C와 비교한다는 사실은 진지한 엔지니어에게 위험 신호가되어야합니다.

Java, Go 및 C ++의 실제 비교를 보려면 https://www.biorxiv.org/content/10.1101/558056v1 스포일러 경고를 참조 하십시오 . Java는 원시 성능에서 1 위를 차지하고 Go는 결합 된 메모리 사용으로 상위에 올랐습니다. 그리고 벽 시간.


잘못된. C ++은 C만큼 빠릅니다. 특히 OOP를 사용할 때 이것이 그의 출생 증명서 철자입니다. 더 많은 추상화 (클래스에서와 같이) 런타임 성능 저하없이 추가 바이트 메모리가 없습니다. 만약 당신이 그것을 모른다면, 자바, c #, go, python, 등등으로

// Btw, C ++는 OO 기능을 사용하지 않는 경우 C만큼 빠를 수 있지만 // 시작하려면 C로 프로그래밍하는 데 아주 가깝습니다. 그렇게 말하면 C ++에 대한 단서가 거의 없으므로 자신을 위해 사용하지 마십시오. C와 C ++는 마법과 중세의 정신을 싫어하고, 미신적 인 성격을 띠고 있습니다. 인터넷에서 읽었습니다. 사실이어야합니다 ... C와 C ++에서 멀리 떨어져, 그들은 당신을 내 친구에게 돌려 줄 것입니다 (정직한 조언)

c는 C ++의 조상입니다. 많은 사람들이 여전히 그것을 사용하고 있습니다 ... C ++는 더 나은 c입니다. 가격을 지불하지 않고도 더 많은 것을 할 수 있습니다. Java, C # 및 Go 작성자는 물론 이해하지 못했습니다. 그러나 그들은 무엇을 할 수 있습니까?!? 기존 (c) 코드와 호환되는 것에 대해서도 동일합니다. C 코드의 실제 바다! 파이썬은 ... 나는 그들이 그것을 잘하지만, 아니, 파이썬의 선은 "컴파일러는 당신의 친구입니다"로 시작해야합니다 가지고 싶은, 즐길 수, 멋진 장난감입니다

>> Java 프로그램에 대해 30 %의 CPU 사용률을 보여줍니다 << 아니오 —— "1 % 0 % 0 % 100 %".
igouy

1
@igouy 나는 그것이 아마도 내가 저지른 오류라는 것을 인정합니다.로드를 보았을 때 나는 '시스템로드'용어로 해석하고 있었고 사용자 / 시스템 / io / idle- 내 실수라고 가정했습니다.
로버트 엥겔스

1

자주 간과되는 사실은 JIT 컴파일이 특히 (런타임) 후기 바인딩 된 함수 또는 메서드에 대해 정적 컴파일이 될 수 있다는 것입니다. 핫스팟 JIT는 RUNTIME에 인라인 할 메소드를 결정하며 현재 실행중인 CPU의 캐시 크기 / 아키텍처에 맞게 데이터 레이아웃을 조정할 수도 있습니다. 일반적으로 C / C ++는 하드웨어에 직접 액세스하여 보완 할 수 있습니다 (전체적으로 더 나은 성능을 발휘 함). Go의 경우 C에 비해 더 높은 수준으로 보일 수 있지만 현재 런타임 최적화 시스템 / 컴파일러가 없습니다. 내 직감은 Go가 포인터 추적을 그다지 강요하지 않고 더 나은 데이터 구조 지역성을 장려하기 때문에 Java보다 더 빠를 수 있다고 말합니다 .


1

사실 Go는 디자인 타임에 우아하고 효율적일뿐만 아니라 런타임에서도 뛰어난 성능을 발휘합니다. 핵심은 올바른 운영 체제, 즉 LINUX를 사용하는 것입니다. Windows 및 Mac OS에서의 성능 프로파일 링 결과는 더 나은 단어가 없기 때문에 1 ~ 2 배 열등합니다.


0

Linux에서 go 런타임은 매우 빠르며 c / c ++와 완벽하게 비교할 수 있습니다. windows와 unix의 go 런타임이 같은 리그에 있지 않습니다.

자바와의 비교는 그다지 중요하지 않습니다. go는 시스템 및 애플리케이션 개발 모두에 해당됩니다 (Java는 애플리케이션 개발 전용 블루 칼라와 비슷하기 때문입니다). 세부 사항은 입력하지 않지만 kubernetes와 같은 것을 작성하면 엔터프라이즈 컨설턴트 친화적 인 장난감이 아니라는 것을 알게됩니다.

나는 당신이 언급 한 타협에 대해 구글이 한 번도 언급 한 것을 기억하지 못한다. go는 시스템 및 응용 프로그램 수준 프로그램을 설계하는 데있어 간단하고 우아하며 효율적이며 포인터, 효율적인 메모리 할당 및 할당 해제로 인한 복잡성을 피하고 잘못 사용하기 쉬운 구현 상속으로 인해 발생하는 복잡성을 방지하여 공동 루틴 및 기타 현대적인 기능을 제공합니다. 시간과 예산에 맞춰 고성능 애플리케이션을 작성하는 방법. 다시 말하지만, go는 Linux에서 매우 빠릅니다. 정확히 설계된 것입니다 (매우 행복합니다).


-4

Java와 C는 모두 데이터 및 메소드 (함수) 정의에 대해 더 명시 적입니다. C는 정적으로 유형이 지정되고 Java는 상속 모델이 적습니다. 이는 데이터가 처리되는 방식이 컴파일 중에 거의 정의된다는 것을 의미합니다.

Go는 데이터 및 함수 정의에 대해 더 암시 적입니다. 기본 제공 함수는 본질적으로 더 일반적이며 유형 계층 구조 (예 : Java 또는 C ++)가 없기 때문에 Go에 속도가 저하됩니다.

Go 언어에 대한 Google의 목표는 실행 속도와 코딩 속도간에 적절한 절충안을 만드는 것입니다. 나는 그들이 초기 시도에서 좋은 스윗 스팟을 치고 있다고 생각하며, 더 많은 작업이 수행 될수록 상황이 개선 될 것입니다.

Go를 코딩 속도가 주요 이점 인보다 동적으로 입력 된 언어와 비교하면 Go의 실행 속도 이점을 확인할 수 있습니다. Go는 사용한 벤치 마크에서 Perl보다 8 배, Ruby 1.9 및 Python 3보다 6 배 빠릅니다.

어쨌든 더 좋은 질문은 Go가 프로그래밍의 용이성과 실행 속도에서 좋은 절충안이라는 것입니다. 내 대답은 '예'이며 더 나아질 것입니다.


20
"유형 계층 구조 (예 : Java 또는 C ++)가 없으면 Go에 속도가 저하됩니다."
Erik Kaplun 2013

6
"Go는 데이터 및 기능 정의에 대해 더 암시 적입니다." 틀 렸습니다. 유형이 설명없이 메소드를 구현할 수있는 방법을 의미합니까? 컴파일러는 유형-인터페이스 멤버십을 감지합니다. 이것은 빠릅니다. "내장 된 함수는 본질적으로 더 일반적입니다."아니오, 내장 기능은 다른 모든 것과 마찬가지로 컴파일됩니다. C ++ 템플릿에서도 마찬가지입니다. "유형 계층 구조 (예 : Java 또는 C ++)가 없으면 Go에 속도가 저하됩니다."-올바르지 않습니다. 유형 계층 구조는 런타임 실행과 관련이 없습니다.
Malcolm 2013
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.