国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Go1.0 到 1.22 的性能表現,提高了多少倍?

開發 前端
Go 所編寫的程序變快的原因有許多,包含但不限于 Go 團隊和外部貢獻者改進了編譯器,并優化了運行時、垃圾回收器和標準庫等。

大家好,我是煎魚。

五一假期時看到 @Ben Hoyt 大佬分享的文章《Go performance from version 1.0 to 1.22》,分享了他在這么多年來一直堅持不懈的對 Go 進行性能測試的記載。

今天基于此分享給大家,有所調整和精簡。


原作者對 Go1.0 到 Go1.22 的所有 Go 版本進行了性能測試,包含了在 Go 1.20 中新增的性能分析引導優化(PGO)的結果。

Go 測試項目用的是 GoAWK[1] 項目,該項目用 Go 寫的 AWK 解釋器,支持 CSV。

GoAWK 使用案例如下:

$ 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

性能測試

接下來正式開始進行性能測試,主要是同項目多版本測試的模式。

原作者(下稱:我)通過在兩個 AWK 程序上運行 GoAWK 來測試這一點,這兩個程序代表了使用 AWK 可以做的極端不同情況:I/O 操作與字符串處理,以及數值計算。

countwords(字符串處理任務)

首先是 countwords,這是一個字符串處理任務,它計算輸入中單詞的頻率并打印出帶有計數的單詞。這是 AWK 腳本的典型應用。

程序輸入是某本書的 10 倍串聯版本的內容。

以下是部分代碼:

{
    for (i=1; i<=NF; i++)
        counts[tolower($i)]++
}

END {
    for (k in counts)
        print k, counts[k]
}

sumloop(循環統計任務)

第二個程序是 sumloop,這是一個緊湊的循環,它多次將循環計數器加到一個變量上。

這個程序并不是 AWK 的典型用法,但它是測試 GoAWK 字節碼解釋器循環的好方法。

以下是部分代碼:

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

注:我不得不對 GoAWK 的代碼做了一些微調,以便它能在舊版本的 Go 上編譯。特別是對于 Go 1.0,因為它沒有 bufio.Scanner,而 GoAWK 在很大程度上依賴它。我為 1.0 使用了 Go 1.1 的 bufio.Scanner 實現。

性能測試圖表

圖表中的計時數字是我在 x86-64 Linux 筆記本電腦上運行三次中的最佳時間(以秒為單位)。藍線代表 countwords 程序,紅線代表 sumloop 程序。

Go 各版本的性能測試結果的圖表如下:

圖片

請注意,這次 Y 軸是對數的,目的是為了更清晰地看到最近版本中更微妙的改進。

圖表中還包括了每個 Go 版本下的 GoAWK 二進制文件大小 —— 那是淺灰色線。

一些要點

1、Go 最大的改進出現在 1.3、1.5、1.7 和 1.12 版本中。在此之后的版本,性能提升變得非常漸進 —— 這意味著所有容易實現的優化早已完成。

2、Go 1.2 性能變差了,countwords 出現了一個奇怪的峰值:它從 1.1 的 7.5 秒增加到 1.2 的 25.5 秒(!),然后下降到 1.3 的 2.8 秒。

我通過分析并注意到 Go 運行時棧操作占據了運行時間的很大一部分,找出了 1.2 異常的原因。

以下是 pprof 輸出的前幾行:

$ go tool pprof --text ./goawk_1.2 go12.prof
Total: 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 中修復的堆棧 “熱分裂” 問題[2]所導致的性能下降,因為在該版本 Go 團隊將 goroutine 棧的實現從舊的分段模型改為連續模型。

3、PGO 僅將性能提高了幾個百分點,使用 Go 1.22,countwords 大約提高了 2%,sumloop 提高了 7%。我使用 PGO 編譯了發布的 GoAWK 二進制文件。

4、二進制文件的大小多年來一直保持相對穩定,除了 1.2 版本中的大幅增加。即使啟用了 PGO,二進制文件的大小也只有大約 5% 的增加,所以我認為通常這是值得的。

結論

從測試結果來看,countwords 現在的運行速度比使用 Go 1.0 時快了大約 8 倍,而 sumloop 快了 24 倍。

Go 所編寫的程序變快的原因有許多,包含但不限于 Go 團隊和外部貢獻者改進了編譯器,并優化了運行時、垃圾回收器和標準庫等。

煎魚注:不得不說,感謝 Go 核心團隊多年來的辛勤工作!讓我們躺著升級個版本,就能實現性能的提高。

參考資料

[1]GoAWK: https://github.com/benhoyt/goawk

[2]堆棧 “熱分裂” 問題: https://docs.google.com/document/u/0/d/1wAaf1rYoM4S4gtnPh0zOlGzWtrZFQ5suE8qr2sD8uWQ/mobilebasic?_immersive_translate_auto_translate=1

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2020-06-12 14:44:06

線程池模式nginx

2020-06-11 08:05:47

nginx線程池數據

2020-02-25 16:51:34

Rust廣告攔截器瀏覽器

2024-02-07 13:37:39

AWS系統應用程序

2021-12-08 12:50:39

代碼MyBatisJava

2021-07-28 14:35:09

代碼進度條前端

2019-06-21 08:39:23

SQLmysql索引

2019-12-10 09:47:51

IaaS云計算物聯網

2021-07-28 09:32:57

Go社區GitHutGo模塊

2024-07-12 11:44:39

2024-08-07 08:51:20

Go優化開發

2025-04-11 08:02:38

2020-12-24 19:29:08

PCIntel芯片

2023-12-26 17:18:13

darktable

2020-08-21 10:59:10

微軟服務器運維

2012-05-02 11:09:38

無線網絡數據傳輸

2012-05-02 12:39:31

無線網絡多跳無線網絡數據傳輸

2016-04-26 09:52:20

Apache Stor流處理大數據

2023-05-22 07:27:08

AI
點贊
收藏

51CTO技術棧公眾號

日韩理论在线观看| 国产aⅴ精品一区二区三区色成熟| 欧美日韩1区2区| 黄大色黄女片18第一次| 可以免费看不卡的av网站| 欧美与黑人午夜性猛交久久久| 美女搞黄视频在线观看| 亚洲黄色免费网站| 国产日产欧美视频| 麻豆精品视频在线观看视频| 91亚洲永久免费精品| 欧洲亚洲视频| 久久人人爽人人爽爽久久 | 中文字幕av日韩| 中文在线最新版地址| 精品人伦一区二区色婷婷| 国产精品影院在线| 污片在线观看一区二区| 360天大佬第二季在线观看| 一区精品在线播放| 国产视频一二| 亚洲一区av在线| 欧美日夜夜逼| 婷婷综合另类小说色区| 四虎永久在线| 日韩欧美综合在线视频| 欧美一区二区三区免费视| 亚洲视频精品在线观看| 亚洲超丰满肉感bbw| 亚洲欧美另类图片| 日韩www.| 欧美激情网友自拍| 亚洲第一论坛sis| 浅井舞香一区二区| 久久精品一区二区不卡| 亚洲mm色国产网站| 亚洲精品影视| 日韩欧美一区二区三区四区五区| 久久精品日韩欧美| 亚洲乱码日产精品bd在线观看| 国产福利视频一区二区三区| 免费成人在线视频网站| 国产日韩亚洲欧美综合| 国产美女在线免费观看| 亚州成人在线电影| 巨大荫蒂视频欧美大片| 精品偷拍一区二区三区在线看| 国产原创一区| 日韩av123| 亚洲欧美日韩国产一区二区| 国产日本欧美在线| 国产精品美女久久久久av爽李琼 | 欧美日本在线视频中文字字幕| 国产精品网在线观看| 国产色视频一区| 亚洲欧美卡通另类91av| 久操手机在线视频| 一区二区三区国产| caoporm免费视频在线| 深夜福利一区二区| 俺要去色综合狠狠| 亚洲国产一区二区精品视频 | 国产夫妻在线| 欧美成人精品在线观看| 欧美日中文字幕| 欧美日韩喷水| 91亚洲资源网| 性欧美孕妇孕交| 亚洲老头同性xxxxx| 人妖一区二区三区| 欧美一区视久久| 国产精品萝li| 欧美一卡二卡| 欧美中文在线字幕| 欲香欲色天天天综合和网| 亚洲国产精品久久久男人的天堂| 91porn在线观看| 美乳少妇欧美精品| 国产精品久久国产愉拍| 日韩欧美三级在线| 日韩一区二区三区免费视频| 久久久精品欧美| 亚洲成av人片在线观看无码| 亚洲三级精品| 人善交video高清| 亚洲国产成人精品一区二区| 高清一区二区三区视频| 精品一区二区成人精品| av免费高清观看| 亚洲国产欧美一区| 午夜精品久久久久久| 日韩激情电影免费看| 日韩av手机在线看| 国内精品国产成人| 中文字幕视频在线观看| 少妇高潮久久77777| 国产精品久久777777毛茸茸 | 欧美一激情一区二区三区| 日本精品在线播放| 亚洲国产一区二区在线| 亚洲成人一二三| 一区二区三区| 一区二区免费在线视频| 91国偷自产一区二区使用方法| 国产精品视频首页| 国产一区二区三区高清在线观看| 国产精品一区二区婷婷| 日韩一区二区在线视频| 51午夜精品国产| 久久在线精品| 不卡的av电影| 6080日韩午夜伦伦午夜伦| 久久色精品视频| 国产精品福利无圣光在线一区| 亚洲人一区二区| 免费毛片b在线观看| 亚洲国产精品久久久久久女王| 欧美精品www在线观看| 热久久99这里有精品| 久精品国产欧美| 国产aaa免费视频| 四虎电影院在线观看| 99re热久久这里只有精品34| 成人a视频在线| 国产高清不卡无码视频| 91久久精品国产91久久性色| 亚洲精品丝袜日韩| 在线一区二区观看| 亚洲男女一区二区三区| 久久99免费视频| 成人勉费视频| 久久精品凹凸全集| 国产免费av一区二区三区| 日韩精品一区二区三区免费视频| 国产一级大片| 性史性dvd影片农村毛片| 欧美sm一区| 欧美日韩精品综合在线| 久久精品夜色噜噜亚洲a∨| 久久亚洲欧洲| 午夜a一级毛片亚洲欧洲| 欧美人与性动交α欧美精品济南到 | 超碰成人免费在线| 精品网站在线看| 高清无码视频直接看| 国产日韩av网站| 亚洲国产精品综合| 欧美视频第一区| www日韩视频| 国产精品白丝jk白祙| 台湾无码一区二区| 亚洲欧美国产不卡| 伊人精品久久久久7777| 自慰无码一区二区三区| 在线观看免费视频高清游戏推荐| 国内精品模特av私拍在线观看| 欧美精品18videos性欧| 久久久久久久久久久免费| 国产精品福利在线观看| 青草视频在线观看视频| 好吊日视频在线观看| 91精品短视频| 免费成人网www| 在线亚洲一区| 99在线精品视频在线观看| 麻豆极品一区二区三区| 校园激情久久| 石原莉奈一区二区三区在线观看| 香蕉亚洲视频| 在线成人www免费观看视频| 国产精品腿扒开做爽爽爽挤奶网站| 黄色在线成人| 国产成人在线观看| 国产精品人成在线观看免费| 亚洲午夜免费| 精品肉辣文txt下载| 好看的日韩av电影| 国产日韩在线观看视频| 草草影院在线观看| 成人高清一区| 一区二区中文字| 久久久精品综合| 日韩一卡二卡三卡四卡| 欧美精品精品精品精品免费| 久久久久久18| 成人av在线网址| 青青视频在线播放| 香蕉视频在线网站| 成人免费图片免费观看| 91超碰碰碰碰久久久久久综合| 888久久久| 久久夜色精品国产欧美乱极品| 日韩日本欧美亚洲| 欧洲一区二区视频| 欧美日本亚洲| 污片在线免费观看| 狠狠色综合播放一区二区| 国产精品1024久久| 最近中文字幕2019免费| 国产视频一区二区三区在线播放|