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

Go1.24 新特性:map 換引擎,性能顯著提高!

開發(fā) 前端
本次 Go1.24 新版本又帶來了一個(gè)比較不錯(cuò)的優(yōu)化點(diǎn),Go map 做了一個(gè)比較大的改變,有了一定的性能優(yōu)化。咱們又可以躺著升級(jí)個(gè)版本就得到一定的性能益處了。今天這篇文章將主要針對(duì)這部分進(jìn)行新版本特性分享。

大家好,我是煎魚。

本次 Go1.24 新版本又帶來了一個(gè)比較不錯(cuò)的優(yōu)化點(diǎn),Go map 做了一個(gè)比較大的改變,有了一定的性能優(yōu)化。

咱們又可以躺著升級(jí)個(gè)版本就得到一定的性能益處了。今天這篇文章將主要針對(duì)這部分進(jìn)行新版本特性分享。

該提案(go/issues/54766[1])的發(fā)起方是來自字節(jié)的大佬們。主要目的建議在 Go map 使用 Swiss Table 來替換 Hashmap 的原始實(shí)現(xiàn)。

圖片圖片

這里不得不提到 Swiss Table 是什么?好像比 Hashmap 牛逼許多。

Swiss Table 是什么

Swiss Table[2] 是一種用于解決哈希沖突的高效哈希表實(shí)現(xiàn),最初由 Google 的工程師開發(fā),在 2017 年首次在技術(shù)大會(huì)中提出。并應(yīng)用于其開源的 Abseil C++ 庫(kù)中。

圖片圖片

Swiss Table 的名字來源于其獨(dú)特的查找方式,該方式結(jié)合了緊湊的存儲(chǔ)和高效的查找性能,類似瑞士軍刀般功能強(qiáng)大且多用途。

以下簡(jiǎn)單介紹 Swiss Table 的幾個(gè)核心概念。有想了解的同學(xué)可以淺嘗。不感興趣的可以跳過該章節(jié)。

緊湊的存儲(chǔ)布局

  • Swiss Table 使用小塊連續(xù)內(nèi)存(稱為 bucket groups)存儲(chǔ)哈希表中的條目。每個(gè) bucket group 通常包含 16 個(gè)條目。
  • 表的元數(shù)據(jù)(如哈希值的高位部分)存儲(chǔ)在一個(gè)緊湊的位圖結(jié)構(gòu)中,這使得查找操作可以快速跳過空的或不匹配的條目。

高效的查找

  • 查找時(shí),Swiss Table 通過元數(shù)據(jù)位圖快速定位可能的條目位置,避免遍歷所有條目。
  • 使用 SIMD(單指令多數(shù)據(jù))技術(shù),在現(xiàn)代 CPU 上一次性檢查多個(gè)桶,大大提高了查找性能。

緩存友好

  • 連續(xù)存儲(chǔ)布局和緊湊的元數(shù)據(jù)結(jié)構(gòu)減少了緩存未命中率,提高了性能。
  • 查找和插入操作充分利用了 CPU 的緩存層次結(jié)構(gòu)。

減少內(nèi)存碎片

  • Swiss Table 在設(shè)計(jì)上盡量減少內(nèi)存使用,同時(shí)保持高性能。
  • 它通過有效的內(nèi)存管理策略減少了因沖突或增長(zhǎng)導(dǎo)致的內(nèi)存碎片。

漸進(jìn)式增長(zhǎng)

  • 在需要擴(kuò)展哈希表時(shí),Swiss Table 采用漸進(jìn)式增長(zhǎng)策略,避免了傳統(tǒng)哈希表一次性擴(kuò)展帶來的性能波動(dòng)。

對(duì) Go map 的用處和效益

在字節(jié)大佬們提供的測(cè)試報(bào)告中,Go map 使用 Swiss Table 而不是 Hashmap 時(shí),能夠帶來以下的性能效益:

  • 查詢:在查詢較大的 hashmap 或查詢 hashmap 中不存在的元素時(shí),有顯著的提升(20%~50%)。在查詢?cè)剌^少的 hashmap 時(shí),性能下降最多 20%。
  • 插入和刪除:在幾乎所有情況下都有顯著提升(20%~50%)。
  • 迭代(iterate):性能提升了大約 10%。
  • 內(nèi)存情況:在大多數(shù)情況下,內(nèi)存使用量減少了 0%~25%。重復(fù)使用固定大小的 hashmap 不再消耗任何額外的內(nèi)存。

使用 Swiss Table 的改造是對(duì)于 Go map 有較大的綜合性能提升的。針對(duì)這一變更評(píng)估了 2 年多(2022 年發(fā)起)后,將在 2025 年 2 月發(fā)布的 Go1.24 正式被應(yīng)用。

但由于該特性還處于實(shí)驗(yàn)性,希望關(guān)閉的同學(xué)也可以設(shè)置 GOEXPERIMENT=noswissmap 來進(jìn)行關(guān)閉。用于做簡(jiǎn)單的對(duì)照數(shù)據(jù)實(shí)驗(yàn)也是不錯(cuò)的。

總結(jié)

本次國(guó)內(nèi)的字節(jié)大佬們?yōu)?Go 運(yùn)行時(shí)貢獻(xiàn)了 Go map 的 Swiss Table 的改造,給 map 帶來了較大的性能提高。

參考資料

[1]go/issues/54766: https://github.com/golang/go/issues/54766

[2]Swiss Table: https://abseil.io/about/design/swisstables

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

2025-02-12 08:50:22

2025-01-20 08:51:32

2025-05-07 08:55:14

GoMap存儲(chǔ)

2024-12-30 11:05:28

泛型Go類型別名

2024-12-23 08:44:49

2022-05-05 11:20:08

KubernetesDocker云計(jì)算

2025-02-07 09:18:05

機(jī)制Go函數(shù)

2024-09-03 08:49:01

2025-03-07 09:12:28

2025-02-08 11:00:33

2013-05-15 09:37:00

GoGo1.1性能測(cè)試

2022-12-09 08:52:51

Go匿名接口

2025-05-26 10:10:00

Go開發(fā)testing

2021-09-05 18:25:30

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

2013-04-18 10:16:29

daMSC性能

2025-05-06 08:00:35

2024-01-22 00:30:00

Go編程Go 1.22

2012-08-15 09:41:28

虛擬化

2024-08-07 08:51:20

Go優(yōu)化開發(fā)

2022-02-11 21:01:18

GoNetip網(wǎng)絡(luò)庫(kù)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 九久久| 成人国产精品视频 | 午夜精品一区二区三区在线观看 | 六月成人网 | 欧美自拍日韩 | 精品久久伊人 | 久久av一区二区三区 | 中文字幕一级毛片视频 | 久久久国产亚洲精品 | 国产精品综合一区二区 | 欧美精品一二三区 | 色橹橹欧美在线观看视频高清 | 911网站大全在线观看 | 日韩在线视频一区 | 9久久| 国产二区在线播放 | www国产成人免费观看视频,深夜成人网 | 91动漫在线观看 | 国产精品不卡一区二区三区 | 国产精品美女一区二区 | 国产一区二区三区在线视频 | 一区二区三区韩国 | 欧美国产一区二区 | 午夜精品视频在线观看 | 欧美啪啪 | 亚洲精品视频免费看 | 成人一区二区三区在线观看 | 女人一区| 噜噜噜噜狠狠狠7777视频 | 国产福利91精品 | 亚洲一区欧美 | 亚洲精品久久久久久久久久久 | 日韩一区二区三区在线视频 | 日韩国产欧美在线观看 | 午夜影院 | 狠狠亚洲 | 日韩国产精品一区二区三区 | 九色国产 | 国产成人免费视频网站高清观看视频 | 黄a免费网络 | 日韩一区二区在线视频 |