亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么Go這么慢(與Java相比)?

為什么Go這么慢(與Java相比)?

Go
莫回無 2021-04-08 15:14:13
從2010年的計算機語言基準游戲中我們可以看到:Go平均比C慢10倍Go比Java慢3倍!考慮到Go編譯器會生成用于執行的本機代碼,這怎么可能?Go的編譯器不成熟?還是Go語言存在一些內在問題?編輯:大多數答案否認Go語言的內在緩慢,聲稱問題出在不成熟的編譯器中。因此,我進行了一些自己的測試來計算斐波那契數:迭代算法在Go(freebsd,6g)中以與sameC(帶有O3選項)一樣的速度運行。遲鈍的遞歸代碼在Go中的運行2 times速度比在C中運行的慢(使用-O3選項;使用-O0-相同)。但是我還沒有看到基準測試中出現10倍的下降。
查看完整描述

3 回答

?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

6g和8g編譯器并不是特別優化,因此它們生成的代碼并不是特別快。

它們旨在快速運行自己并生成可以的代碼(有些優化)。gccgo使用GCC的現有優化遍歷,并可能與C進行更有意義的比較,但是gccgo尚未完成功能。

基準數字幾乎完全與執行質量有關。它們與這種語言沒有太多關系,除非實現花費了運行時支持基準測試實際上不需要的語言功能。在大多數編譯語言中,理論上足夠聰明的編譯器可以剔除不需要的內容,但是您到了要演示的地方,因為很少有真正的語言用戶編寫不使用該功能的程序。 。將事情移開而不完全刪除它們(例如,在JIT編譯的Java中預測虛擬調用目標)開始變得棘手。

FWIW是我自己對Go進行的非?,嵥榈臏y試(基本上是整數加法循環),gccgo朝著介于Cgcc -O0gcc -O2C范圍內的范圍的快端生成了代碼。Go并不是天生就很慢,但是編譯器還不能做所有事情。對于使用10分鐘的語言來說,這不足為奇。


查看完整回答
反對 回復 2021-04-26
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

在Go FAQ的下一版本中,應顯示類似以下內容。

表現

為什么Go在基準X上表現不佳?

Go的設計目標之一是接近可比程序的C性能,但在某些基準上卻表現不佳,包括在測試/基準測試中的一些基準。最慢的速度取決于在Go中沒有可比較性能的版本的庫。例如,數字位數取決于多精度數學程序包,而與Go語言不同,C語言版本使用GMP(用優化的匯編程序編寫)。依賴于正則表達式(例如regex-dna)的基準本質上是將Go的權宜之計regexp軟件包與成熟的,高度優化的正則表達式庫(如PCRE)進行比較。

基準測試是通過廣泛的調整贏得的,大多數基準的Go版本需要引起注意。如果您測量類似的C和Go程序(反向補碼就是一個例子),您會發現這兩種語言的原始性能比該套件所表明的要緊密得多。

盡管如此,仍有改進的空間。編譯器很好,但是可能會更好,許多庫需要大量的性能工作,并且垃圾收集器還不夠快(即使這樣做,請注意不要生成不必要的垃圾會產生巨大的影響)。

這是來自最近的郵件列表線程的有關計算機基準測試游戲的更多詳細信息。

gccgo中的垃圾收集和性能(1)

gccgo中的垃圾收集和性能(2)

重要的是要注意,計算機基準測試只是一個游戲。在性能評估和容量規劃方面有經驗的人員會仔細地匹配實際和實際的工作負載;他們不玩游戲。


查看完整回答
反對 回復 2021-04-26
  • 3 回答
  • 0 關注
  • 381 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號