成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go1.17 新特性,憑什么提速 5~10%?

開(kāi)發(fā) 后端
在 Go1.17 發(fā)布后,我們驚喜的發(fā)現(xiàn) Go 語(yǔ)言他又又又優(yōu)化了,編譯器改進(jìn)后產(chǎn)生了約 5% 的性能提升,也沒(méi)有什么破壞性修改,保證了向前兼容。

 [[420321]]

大家好,我是煎魚(yú)。

在 Go1.17 發(fā)布后,我們驚喜的發(fā)現(xiàn) Go 語(yǔ)言他又又又優(yōu)化了,編譯器改進(jìn)后產(chǎn)生了約 5% 的性能提升,也沒(méi)有什么破壞性修改,保證了向前兼容。

他做了些什么呢,好像沒(méi)怎么看到有人提起。為此今天煎魚(yú)帶大家來(lái)解讀兩新提案:

  • 《Proposal: Register-based Go calling convention[1]》
  • 《Proposal: Create an undefined internal calling convention[2]》

本文會(huì)基于提案講解和拆解,畢竟分享新知識(shí)肯定要從官方資料作為事實(shí)基準(zhǔn)出發(fā)。

背景

在以往的 Go 版本中,Go 的調(diào)用約定簡(jiǎn)單且?guī)缀蹩缙脚_(tái)通用,其原因在于選用了基于 Plan9 ABI 的堆棧調(diào)用約定,也就是函數(shù)的參數(shù)和返回值都是通過(guò)堆棧上來(lái)進(jìn)行傳遞。

這里我們一共提到了 Plan9 和 ABI,這是兩個(gè)很關(guān)鍵的理念:

  • Plan9:Go 語(yǔ)言所使用的匯編器,Rob Pike 是貝爾實(shí)驗(yàn)室的猛人。
  • ABI:Application Binary Interface(應(yīng)用程序二進(jìn)制接口),ABI 包含了應(yīng)用程序在操作系統(tǒng)下運(yùn)行時(shí)必須遵守的編程約定(例如:二進(jìn)制接口)。

該方案的優(yōu)缺點(diǎn)如下:

  • 優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單,簡(jiǎn)化了實(shí)現(xiàn)成本。
  • 缺點(diǎn):性能方面付出了不少的代價(jià)。

按我理解,在 Go 語(yǔ)言初創(chuàng)時(shí)期,采取先簡(jiǎn)單實(shí)現(xiàn),跑起來(lái)再說(shuō)。也合理,性能倒不是一個(gè) TOP1 需求。

Go1.17 優(yōu)化

什么是調(diào)用慣例

在新版本的優(yōu)化中,提到了調(diào)用慣例(calling convention)的概念,指的是調(diào)用方和被調(diào)用方對(duì)函數(shù)調(diào)用的共識(shí)約定。

這些共識(shí)包含:函數(shù)的參數(shù)、返回值、參數(shù)傳遞順序、傳遞方式等。

雙方都必須遵循這個(gè)約定時(shí),程序的函數(shù)才能正常的運(yùn)行起來(lái)。如果不遵循,那么該函數(shù)是沒(méi)法運(yùn)行起來(lái)的。

優(yōu)化是什么

在 Go1.17 起,正式開(kāi)始基于 Go 內(nèi)部 ABI 規(guī)范(在 Go 函數(shù)之間使用),并且從原有的基于堆棧的函數(shù)參數(shù)和結(jié)果傳遞的方式改為基于寄存器的函數(shù)參數(shù)和結(jié)果傳遞。

在性能上,現(xiàn)在直接存儲(chǔ)和計(jì)算都在寄存器上,和以前基于堆棧存儲(chǔ),再計(jì)算相比,現(xiàn)在這種模式勢(shì)必是性能更優(yōu)的。

本次修改涉及到的項(xiàng)非常多,該優(yōu)化是持續(xù)的,原本預(yù)計(jì)是 Go1.16 實(shí)現(xiàn),不過(guò)拖到了 Go1.17。

目前實(shí)現(xiàn)了 amd64 和 arm64 架構(gòu)的支持。還有不少的更多的支持會(huì)持續(xù)在 Go1.18 中完成,具體進(jìn)度可見(jiàn) issues #40724[3]。

性能如何

在 Go1.17 Release Notes[4] 中明確指出,用一組有代表性的 Go 包和程序的基準(zhǔn)測(cè)試。

官方數(shù)據(jù)顯示:

  • Go 程序的運(yùn)行性能提高了約 5%。
  • Go 所編譯出的二進(jìn)制大小的減少約 2%。

在民間數(shù)據(jù)來(lái)看,在 twitter[5] 看到 @Achille 表示從 Go1.15.7 升級(jí)到 Go1.17 后顯示。在一個(gè)大規(guī)模的數(shù)據(jù)處理系統(tǒng)上進(jìn)行的 Go1.17 升級(jí)產(chǎn)生了驚人的效果,我們來(lái)看看他的真實(shí)數(shù)據(jù)。

CPU、Malloc 調(diào)用時(shí)間減少了約15%:

圖來(lái)自 @Achille

圖來(lái)自 @Achille

RSS 大小更接近于堆的大小:

圖來(lái)自 @Achille

內(nèi)存方面從原本的 1.6GB 降至 1GB。

結(jié)合官方和民間數(shù)據(jù)來(lái)看,優(yōu)化效果是明確且有效的。有興趣的小伙伴也可以自己測(cè)一測(cè)。

不過(guò)需要注意,@Achille 的數(shù)據(jù)是包含 Go1.16 和 Go1.17 的優(yōu)化的,沒(méi)法直接對(duì)比,但可以參考。

總結(jié)

在 Go1.17 這一個(gè)新版本中,只需要簡(jiǎn)單的升一升 Go 版本,我們就能得到一定的性能優(yōu)化,這是非常不錯(cuò)的。

不過(guò)這一改動(dòng),Go 的匯編又變了,怕不是市面上很多文章或書(shū)的部分內(nèi)容又失效了。

從以往的基于堆棧的函數(shù)參數(shù)和結(jié)果傳遞的方式改為 Go1.17~Go1.18 基于寄存器的函數(shù)參數(shù)和結(jié)果傳遞,Go 語(yǔ)言正在一步步走的更好!

你覺(jué)得呢?

參考資料

[1]Proposal: Register-based Go calling convention: https://go.googlesource.com/proposal/+/master/design/40724-register-calling.md

[2]Proposal: Create an undefined internal calling convention: https://go.googlesource.com/proposal/+/master/design/27539-internal-abi.md

[3]issues #40724: https://github.com/golang/go/issues/40724

[4]Go1.17 Release Notes: https://golang.org/doc/go1.17

[5]twitter: https://twitter.com/Achille/status/1431014148800802819

責(zé)任編輯:武曉燕 來(lái)源: 腦子進(jìn)煎魚(yú)了
相關(guān)推薦

2021-09-05 18:25:30

Go命令倉(cāng)庫(kù)

2021-09-01 07:21:46

堆棧Gopanic

2021-05-30 22:53:05

Go1.17版本 tip

2021-08-19 09:37:06

Go 1.17語(yǔ)言架構(gòu)

2018-05-18 15:05:25

JavaJava 10新特性

2024-01-22 00:30:00

Go編程Go 1.22

2021-12-27 18:27:18

GoTryLockJava

2019-03-05 15:03:09

Android Q安卓系統(tǒng)功能

2020-11-24 13:05:35

Go語(yǔ)言泛型

2021-08-30 08:23:34

Go語(yǔ)言進(jìn)程

2009-06-29 17:42:03

Tapestry5新特

2011-08-30 09:07:30

HTML 5

2022-02-11 21:01:18

GoNetip網(wǎng)絡(luò)庫(kù)

2021-02-02 09:10:12

Go語(yǔ)言二進(jìn)制

2011-07-12 13:21:34

2011-11-09 10:05:26

HTML 5

2017-06-06 16:30:55

戴爾交付保障

2015-07-06 09:46:21

AeroGearAndroid推送

2025-04-27 08:00:35

2021-08-19 09:43:09

Fedora 35LLVMGo 1.17
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产中的精品av涩差av | 天堂网av在线 | 亚洲视频一区在线观看 | 久久久久久久久久久久久久av | 在线国产欧美 | 99久久久99久久国产片鸭王 | 中文字幕国产精品 | 99精品国产一区二区三区 | 日韩美香港a一级毛片免费 国产综合av | 国产美女一区二区三区 | 99re视频这里只有精品 | 一级做a | 久久国产精品免费一区二区三区 | 欧美精品在线观看 | 日韩超碰在线 | 免费一区二区 | 天堂一区在线 | 久久99精品久久 | 国产高清一区二区 | av中文字幕在线观看 | 久久精品小视频 | 国产精品影视 | 99精品电影 | 欧美精品一区二区在线观看 | av影片在线| 99国产精品久久久 | 国产精品1区2区 | 欧美日韩国产一区 | 国产精品一区二区三区久久久 | 亚洲一区久久 | 亚洲伦理自拍 | 久久久久久久久久久成人 | 国产精品久久久久久久久婷婷 | 色综合色综合网色综合 | 成人性视频免费网站 | 欧美jizzhd精品欧美巨大免费 | 精品久久久久久 | 亚洲精品视频免费观看 | 日韩2020狼一二三 | 一级毛片色一级 | 99精品一区二区三区 |