AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

Go1.0 到 1.22 的性能表現(xiàn),提高了多少倍?

來源: 責(zé)編: 時(shí)間:2024-05-16 09:10:43 176觀看
導(dǎo)讀大家好,我是煎魚。五一假期時(shí)看到 @Ben Hoyt 大佬分享的文章《Go performance from version 1.0 to 1.22》,分享了他在這么多年來一直堅(jiān)持不懈的對 Go 進(jìn)行性能測試的記載。今天基于此分享給大家,有所調(diào)整和精簡。原作者

大家好,我是煎魚。Bdg28資訊網(wǎng)——每日最新資訊28at.com

五一假期時(shí)看到 @Ben Hoyt 大佬分享的文章《Go performance from version 1.0 to 1.22》,分享了他在這么多年來一直堅(jiān)持不懈的對 Go 進(jìn)行性能測試的記載。Bdg28資訊網(wǎng)——每日最新資訊28at.com

今天基于此分享給大家,有所調(diào)整和精簡。Bdg28資訊網(wǎng)——每日最新資訊28at.com


原作者對 Go1.0 到 Go1.22 的所有 Go 版本進(jìn)行了性能測試,包含了在 Go 1.20 中新增的性能分析引導(dǎo)優(yōu)化(PGO)的結(jié)果。Bdg28資訊網(wǎng)——每日最新資訊28at.com

Go 測試項(xiàng)目用的是 GoAWK[1] 項(xiàng)目,該項(xiàng)目用 Go 寫的 AWK 解釋器,支持 CSV。Bdg28資訊網(wǎng)——每日最新資訊28at.com

GoAWK 使用案例如下:Bdg28資訊網(wǎng)——每日最新資訊28at.com

$ go install github.com/benhoyt/goawk@latest$ goawk 'BEGIN { print "foo", 42 }'foo 42$ echo 1 2 3 | goawk '{ print $1 + $3 }'4# Or use GoAWK's CSV and @"named-field" support:$ echo -e 'name,amount/nBob,17.50/nJill,20/n"Boba Fett",100.00' | /  goawk -i csv -H '{ total += @"amount" } END { print total }'137.5

性能測試

接下來正式開始進(jìn)行性能測試,主要是同項(xiàng)目多版本測試的模式。Bdg28資訊網(wǎng)——每日最新資訊28at.com

原作者(下稱:我)通過在兩個(gè) AWK 程序上運(yùn)行 GoAWK 來測試這一點(diǎn),這兩個(gè)程序代表了使用 AWK 可以做的極端不同情況:I/O 操作與字符串處理,以及數(shù)值計(jì)算。Bdg28資訊網(wǎng)——每日最新資訊28at.com

countwords(字符串處理任務(wù))

首先是 countwords,這是一個(gè)字符串處理任務(wù),它計(jì)算輸入中單詞的頻率并打印出帶有計(jì)數(shù)的單詞。這是 AWK 腳本的典型應(yīng)用。Bdg28資訊網(wǎng)——每日最新資訊28at.com

程序輸入是某本書的 10 倍串聯(lián)版本的內(nèi)容。Bdg28資訊網(wǎng)——每日最新資訊28at.com

以下是部分代碼:Bdg28資訊網(wǎng)——每日最新資訊28at.com

{    for (i=1; i<=NF; i++)        counts[tolower($i)]++}END {    for (k in counts)        print k, counts[k]}

sumloop(循環(huán)統(tǒng)計(jì)任務(wù))

第二個(gè)程序是 sumloop,這是一個(gè)緊湊的循環(huán),它多次將循環(huán)計(jì)數(shù)器加到一個(gè)變量上。Bdg28資訊網(wǎng)——每日最新資訊28at.com

這個(gè)程序并不是 AWK 的典型用法,但它是測試 GoAWK 字節(jié)碼解釋器循環(huán)的好方法。Bdg28資訊網(wǎng)——每日最新資訊28at.com

以下是部分代碼:Bdg28資訊網(wǎng)——每日最新資訊28at.com

BEGIN {    for (i=0; i<10000000; i++)        sum += i+i+i+i+i}

注:我不得不對 GoAWK 的代碼做了一些微調(diào),以便它能在舊版本的 Go 上編譯。特別是對于 Go 1.0,因?yàn)樗鼪]有 bufio.Scanner,而 GoAWK 在很大程度上依賴它。我為 1.0 使用了 Go 1.1 的 bufio.Scanner 實(shí)現(xiàn)。Bdg28資訊網(wǎng)——每日最新資訊28at.com

性能測試圖表

圖表中的計(jì)時(shí)數(shù)字是我在 x86-64 Linux 筆記本電腦上運(yùn)行三次中的最佳時(shí)間(以秒為單位)。藍(lán)線代表 countwords 程序,紅線代表 sumloop 程序。Bdg28資訊網(wǎng)——每日最新資訊28at.com

Go 各版本的性能測試結(jié)果的圖表如下:Bdg28資訊網(wǎng)——每日最新資訊28at.com

圖片Bdg28資訊網(wǎng)——每日最新資訊28at.com

請注意,這次 Y 軸是對數(shù)的,目的是為了更清晰地看到最近版本中更微妙的改進(jìn)。Bdg28資訊網(wǎng)——每日最新資訊28at.com

圖表中還包括了每個(gè) Go 版本下的 GoAWK 二進(jìn)制文件大小 —— 那是淺灰色線。Bdg28資訊網(wǎng)——每日最新資訊28at.com

一些要點(diǎn)

1、Go 最大的改進(jìn)出現(xiàn)在 1.3、1.5、1.7 和 1.12 版本中。在此之后的版本,性能提升變得非常漸進(jìn) —— 這意味著所有容易實(shí)現(xiàn)的優(yōu)化早已完成。Bdg28資訊網(wǎng)——每日最新資訊28at.com

2、Go 1.2 性能變差了,countwords 出現(xiàn)了一個(gè)奇怪的峰值:它從 1.1 的 7.5 秒增加到 1.2 的 25.5 秒(!),然后下降到 1.3 的 2.8 秒。Bdg28資訊網(wǎng)——每日最新資訊28at.com

我通過分析并注意到 Go 運(yùn)行時(shí)棧操作占據(jù)了運(yùn)行時(shí)間的很大一部分,找出了 1.2 異常的原因。Bdg28資訊網(wǎng)——每日最新資訊28at.com

以下是 pprof 輸出的前幾行:Bdg28資訊網(wǎng)——每日最新資訊28at.com

$ go tool pprof --text ./goawk_1.2 go12.profTotal: 1830 samples     332  18.1%  18.1%      332  18.1% runtime.newstack     296  16.2%  34.3%      296  16.2% runtime.memclr     281  15.4%  49.7%      281  15.4% runtime.oldstack     222  12.1%  61.8%      619  33.8% github.com/benhoyt/goawk/interp.(*interp).execute      91   5.0%  66.8%       91   5.0% runtime.lessstack      75   4.1%  70.9%      133   7.3% github.com/benhoyt/goawk/interp.(*interp).callBuiltin      57   3.1%  74.0%       57   3.1% runtime.stackfree      53   2.9%  76.9%       81   4.4% strings.FieldsFunc      ...

這幾乎可以肯定是由于在 1.3 中修復(fù)的堆棧 “熱分裂” 問題[2]所導(dǎo)致的性能下降,因?yàn)樵谠摪姹?Go 團(tuán)隊(duì)將 goroutine 棧的實(shí)現(xiàn)從舊的分段模型改為連續(xù)模型。Bdg28資訊網(wǎng)——每日最新資訊28at.com

3、PGO 僅將性能提高了幾個(gè)百分點(diǎn),使用 Go 1.22,countwords 大約提高了 2%,sumloop 提高了 7%。我使用 PGO 編譯了發(fā)布的 GoAWK 二進(jìn)制文件。Bdg28資訊網(wǎng)——每日最新資訊28at.com

4、二進(jìn)制文件的大小多年來一直保持相對穩(wěn)定,除了 1.2 版本中的大幅增加。即使啟用了 PGO,二進(jìn)制文件的大小也只有大約 5% 的增加,所以我認(rèn)為通常這是值得的。Bdg28資訊網(wǎng)——每日最新資訊28at.com

結(jié)論

從測試結(jié)果來看,countwords 現(xiàn)在的運(yùn)行速度比使用 Go 1.0 時(shí)快了大約 8 倍,而 sumloop 快了 24 倍。Bdg28資訊網(wǎng)——每日最新資訊28at.com

Go 所編寫的程序變快的原因有許多,包含但不限于 Go 團(tuán)隊(duì)和外部貢獻(xiàn)者改進(jìn)了編譯器,并優(yōu)化了運(yùn)行時(shí)、垃圾回收器和標(biāo)準(zhǔn)庫等。Bdg28資訊網(wǎng)——每日最新資訊28at.com

煎魚注:不得不說,感謝 Go 核心團(tuán)隊(duì)多年來的辛勤工作!讓我們躺著升級個(gè)版本,就能實(shí)現(xiàn)性能的提高。Bdg28資訊網(wǎng)——每日最新資訊28at.com

參考資料

[1]GoAWK: https://github.com/benhoyt/goawkBdg28資訊網(wǎng)——每日最新資訊28at.com

[2]堆棧 “熱分裂” 問題: https://docs.google.com/document/u/0/d/1wAaf1rYoM4S4gtnPh0zOlGzWtrZFQ5suE8qr2sD8uWQ/mobilebasic?_immersive_translate_auto_translate=1Bdg28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-88398-0.htmlGo1.0 到 1.22 的性能表現(xiàn),提高了多少倍?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: React 全新編譯器太好用了!

下一篇: 有哪些 Java 面試題 90% 的公司會(huì)問到?

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 7月安卓手機(jī)性能榜:紅魔8S Pro再奪榜首

    7月份的手機(jī)市場風(fēng)平浪靜,除了紅魔和努比亞帶來了兩款搭載驍龍8Gen2領(lǐng)先版處理器的新機(jī)之外,別的也想不到有什么新品了,這也正常,通常6月7月都是手機(jī)廠商修整的時(shí)間,進(jìn)入8月份之
  • 《英雄聯(lián)盟》夏季賽總決賽今日開打!JDG對陣LNG首發(fā)名單來了 Knight:準(zhǔn)備三連冠

    8月5日消息,今日17:00,《英雄聯(lián)盟》2023LPL夏季賽總決賽將正式開打,由JDG對陣LNG。對兩支隊(duì)伍來說,這場比賽不僅要爭奪夏季賽冠軍,更要決定誰才是LPL賽區(qū)一
  • 分布式系統(tǒng)中的CAP理論,面試必問,你理解了嘛?

    對于剛剛接觸分布式系統(tǒng)的小伙伴們來說,一提起分布式系統(tǒng),就感覺高大上,深不可測。而且看了很多書和視頻還是一臉懵逼。這篇文章主要使用大白話的方式,帶你理解一下分布式系統(tǒng)
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 講故事上個(gè)月我寫過一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當(dāng)時(shí)用的是 GDIView + WinDbg 把問題搞定,前者用來定位泄露資源,后者用來定位泄露代碼,后面有朋友反
  • JVM優(yōu)化:實(shí)戰(zhàn)OutOfMemoryError異常

    一、Java堆溢出堆內(nèi)存中主要存放對象、數(shù)組等,只要不斷地創(chuàng)建這些對象,并且保證 GC Roots 到對象之間有可達(dá)路徑來避免垃 圾收集回收機(jī)制清除這些對象,當(dāng)這些對象所占空間超過
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會(huì)涉及各種各樣的安全任務(wù),包括但不限于:開發(fā)某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 得物寵物生意「狂飆」,發(fā)力“它經(jīng)濟(jì)”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內(nèi)的&ldquo;在線鑒別&rdquo;,可找到鑒別寵物的選項(xiàng)。通過上傳自家寵物的部位細(xì)節(jié),就能收獲擁有專業(yè)資質(zhì)認(rèn)證的得物鑒
  • 阿里大調(diào)整

    來源:產(chǎn)品劉有媒體報(bào)道稱,近期淘寶天貓集團(tuán)啟動(dòng)了近年來最大的人力制度改革,涉及員工績效、層級體系等多個(gè)核心事項(xiàng),目前已形成一個(gè)初步的&ldquo;征求意見版&rdquo;:1、取消P序列
  • 國行版三星Galaxy Z Fold5/Z Flip5發(fā)布 售價(jià)7499元起

    2023年8月3日,三星電子舉行Galaxy新品中國發(fā)布會(huì),正式在國內(nèi)推出了新一代折疊屏智能手機(jī)三星Galaxy Z Fold5與Galaxy Z Flip5,以及三星Galaxy Tab S9
Top