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

Go1.24 新特性:自旋互斥 lock2 優(yōu)化,性能有一定提高!

開發(fā) 前端
通過上述的分析,原作者發(fā)現(xiàn)當(dāng)前的 lock2 實現(xiàn)雖然理論上允許線程睡眠,但實際上導(dǎo)致所有線程都在自旋,自旋的線程至少與(并且可能也導(dǎo)致)更慢的鎖傳遞有關(guān),帶來了不少的性能損耗。

大家好,我是煎魚。

除了上次跟大家提到的 map 使用 Swiss Table 來替換 Hashmap 的原始實現(xiàn)以外。本次 Go1.24 新版本還帶來了更多的有效優(yōu)化。

今天這篇文章將繼續(xù)和大家一起學(xué)習(xí)自旋互斥 lock2 優(yōu)化。

背景

提案作者 @Rhys Hiltner 在 2024 年提出了改進互斥鎖的性能優(yōu)化訴求:

圖片

其個人對于 runtime.mutex 值的部分經(jīng)驗是:整個進程會因為對單個 mutex 的需求使得整個程序緩慢運行。

我不認為這一點會讓人感到意外,盡管速度減慢的程度超出了我的預(yù)期。主要的驚喜在于,程序一旦跌落性能懸崖,就很難再恢復(fù)過來。

性能測試

在基準測試 ChanContended 中,作者發(fā)現(xiàn)隨著 GOMAXPROCS 的增加,mutex 的性能明顯下降。

  • Intel i7-13700H (linux/amd64):
  • 當(dāng)允許使用 4 個線程時,整個進程的吞吐量是單線程時的一半。
  • 當(dāng)允許使用 8 個線程時,吞吐量再次減半。
  • 當(dāng)允許使用 12 個線程時,吞吐量再次減半。
  • 在 GOMAXPROCS=20 時,200 次通道操作平均耗時 44 微秒,平均每 220 納秒調(diào)用一次 unlock2,每次都有機會喚醒一個睡眠線程。
  • M1 MacBook Air (darwin/arm64):
  • 當(dāng)允許使用 5 個線程時,吞吐量不到單線程時的一半。

另一個角度是考慮進程的 CPU 占用時間。

下面的數(shù)據(jù)顯示,在 1.78 秒的掛鐘時間內(nèi),進程的 20 個線程在 lock2 調(diào)用中總共有 27.74 秒處于 CPU 上。

如下測試報告:

$ go test runtime -test.run='^$' -test.bench=ChanContended -test.cpu=20 -test.count=1 -test.cpuprofile=/tmp/p
goos: linux
goarch: amd64
pkg: runtime
cpu: 13th Gen Intel(R) Core(TM) i7-13700H
BenchmarkChanContended-20        26667      44404 ns/op
PASS
ok   runtime 1.785s

$ go tool pprof -peek runtime.lock2 /tmp/p
File: runtime.test
Type: cpu
Time: Jul 24, 2024 at 8:45pm (UTC)
Duration: 1.78s, Total samples = 31.32s (1759.32%)
Showing nodes accounting for 31.32s, 100% of 31.32s total
----------------------------------------------------------+-------------
      flat  flat%   sum%        cum   cum%   calls calls% + context
----------------------------------------------------------+-------------
                                            27.74s   100% |   runtime.lockWithRank
     4.57s 14.59% 14.59%     27.74s 88.57%                | runtime.lock2
                                            19.50s 70.30% |   runtime.procyield
                                             2.74s  9.88% |   runtime.futexsleep
                                             0.84s  3.03% |   runtime.osyield
                                             0.07s  0.25% |   runtime.(*lockTimer).begin
                                             0.02s 0.072% |   runtime.(*lockTimer).end
----------------------------------------------------------+-------------

關(guān)鍵問題之一:這些 lock2 相關(guān)的線程并沒有休眠,而是一直在自旋!

新提案:增加 spinning 狀態(tài)

發(fā)現(xiàn)問題

通過上述的分析,原作者發(fā)現(xiàn)當(dāng)前的 lock2 實現(xiàn)雖然理論上允許線程睡眠,但實際上導(dǎo)致所有線程都在自旋,自旋的線程至少與(并且可能也導(dǎo)致)更慢的鎖傳遞有關(guān),帶來了不少的性能損耗。

@Rhys Hiltner 進而提出了新的設(shè)計方案《Proposal: Improve scalability of runtime.lock2[1]》。大家有興趣的可以認真看下。下面提及主要優(yōu)化部分。

圖片

核心優(yōu)化點

核心的觀點在于:擴展互斥鎖的 mutex 狀態(tài)字,加入一個新的標志位,稱為 “spinning”(旋轉(zhuǎn))。

使用這個 “spinning” 位來表示是否有一個等待的線程處于 “醒著并循環(huán)嘗試獲取鎖” 的狀態(tài)。線程之間會互相排除進入 “spinning” 狀態(tài),但它們不會因為嘗試獲取這個標志位而阻塞。

只有持有 “spinning” 位的線程可以循環(huán)重新加載 mutex 狀態(tài)字。這個線程在進入休眠之前會釋放 “spinning” 位。其他等待線程則會直接進入休眠,而不會嘗試爭奪 “spinning” 位。

當(dāng)某個線程解鎖互斥鎖時,如果發(fā)現(xiàn)已經(jīng)有線程處于 “醒著并旋轉(zhuǎn)” 的狀態(tài),就可以避免喚醒其他線程。在 Go 運行時的背景下,這種設(shè)計被稱為 “spinbit”(旋轉(zhuǎn)位)。

簡單來說,這個設(shè)計的核心目的是:通過讓一個線程負責(zé) “旋轉(zhuǎn)嘗試獲取鎖”,避免所有線程都同時競爭資源,從而減少爭用和不必要的線程切換。

兼容性和多平臺

本次對于兼容性有保障,導(dǎo)出 API 沒有變化。所以我們只需要升級到新版本 Go1.24 就可以白嫖這個優(yōu)化點了!

目前該優(yōu)化支持 futex 和 Xchg8 系統(tǒng)調(diào)用兩個類型。futex 專門用于 GOOS=linux 平臺。futex 是主要實現(xiàn),整體綜合表現(xiàn)會好一些。

在已支持的平臺上會默認打開 GOEXPERIMENT=spinbitmutex 以此應(yīng)用該實驗性規(guī)則。如果大家不需要可以進行關(guān)閉。

參考資料

[1]Proposal: Improve scalability of runtime.lock2: https://github.com/golang/proposal/blob/master/design/68578-mutex-spinbit.md

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

2025-01-06 09:18:04

2025-02-12 08:50:22

2024-12-30 11:05:28

泛型Go類型別名

2024-12-23 08:44:49

2025-05-07 08:55:14

GoMap存儲

2022-05-05 11:20:08

KubernetesDocker云計算

2025-02-07 09:18:05

機制Go函數(shù)

2024-09-03 08:49:01

2025-03-07 09:12:28

2025-02-08 11:00:33

2022-12-09 08:52:51

Go匿名接口

2013-05-15 09:37:00

GoGo1.1性能測試

2025-05-26 10:10:00

Go開發(fā)testing

2022-05-02 09:21:25

微信微信支付

2021-01-14 10:38:41

Java枚舉工具

2021-09-01 07:21:46

堆棧Gopanic

2022-09-30 14:00:50

JavaScrip新特性代碼

2025-05-06 08:00:35

2021-09-05 18:25:30

Go命令倉庫

2021-02-02 09:10:12

Go語言二進制
點贊
收藏

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

在线精品国产成人综合| 四虎影视国产精品| 日韩高清一区| 成人听书哪个软件好| 日韩网站在线| 精品一区二区三区免费视频| 久久成人免费网| 日本最新在线视频| 亚洲淫成人影院| 国产成人三级| 激情综合网五月| 久久艹国产精品| 国产主播喷水一区二区| 亚洲日韩欧美视频一区| 天天亚洲美女在线视频| 成人福利视频网站| 国内精品久久久久久久97牛牛 | 欧美日韩三区四区| 久久久久久久电影一区| 日韩一区二区三区高清免费看看| 91丝袜美腿高跟国产极品老师| 欧美日韩国产免费观看| 蜜桃精品视频| a天堂资源在线| 激情小视频在线观看| 成人性生交免费看| 懂色av一区二区三区四区五区| 国产乱人伦真实精品视频| 久久亚洲影音av资源网| 精品人伦一区二区色婷婷| 日韩欧美极品在线观看| 久久婷婷综合激情| 捆绑调教美女网站视频一区| 午夜欧美理论片| 综合伊思人在钱三区| 亚洲高清影院| 国产美女高潮在线| 亚乱亚乱亚洲乱妇| 亚洲成人男人天堂| 国产高潮免费视频| 少妇高潮喷水在线观看| 亚洲开发第一视频在线播放| 99久久无色码| 国产精品视频不卡| 久久久久久久网站| 精品国模在线视频| 亚洲欧美成人一区二区在线电影| 亚洲福利免费| 丝袜av一区| 视频欧美精品| 国产精品专区免费| 日韩三级电影视频| 香蕉视频网站在线观看| 污视频在线看操| 深夜宅男网站免费进入| 日韩av片网站| a在线视频观看| 91国在线高清视频| 一区二区三区欧美在线| 久久偷窥视频| yy111111少妇影院日韩夜片| 国产精品久久久久久久久久尿| 久久久久久中文| 久久成人综合视频| 一区二区欧美在线| 亚洲色图偷窥自拍| 亚洲精品日韩在线| 日韩激情片免费| 日韩av最新在线观看| 亚洲第一中文字幕在线观看| 91精品欧美久久久久久动漫| 91九色最新地址| 天天做天天摸天天爽国产一区| 亚洲精品videosex极品| 亚洲精品伦理在线| 一区二区激情小说| 亚洲高清视频中文字幕| 亚洲午夜精品在线| 精品电影在线观看| 色天使色偷偷av一区二区| 日韩欧美精品中文字幕| 欧美在线一区二区| 欧美日韩在线播放一区| 56国语精品自产拍在线观看| 91精品国产综合久久小美女| 欧美一区二区三级| 亚洲成成品网站| 亚洲精品成人久久| 亚洲视频一区二区三区| xxxxx成人.com| 欧美福利视频在线| 欧美又大又粗又长| 国产精品视频永久免费播放| 成人两性免费视频| caoporn国产精品免费公开| 亚洲va欧美va国产综合剧情| αv一区二区三区| 日本视频一区二区在线观看| 欧美日韩在线三区| 在线观看视频网站你懂得| 国产精品啊啊啊| 欧美在线一级va免费观看| 成人高清视频在线| 91精品国产高清自在线| 国产精品毛片久久久久久久久久99999999| 97高清视频| 日本高清中文字幕| 在线观看午夜看亚太视频| www免费网站在线观看| caopon在线免费视频| 午夜影院在线播放| 99热播精品免费| 国内精品国产成人国产三级粉色| 精品国产中文字幕第一页| 欧美搞黄网站| 中文字幕av不卡在线| www.99com| 天海翼一区二区三区四区在线观看| 日韩在线免费看| 亚洲综合图区| 中文.日本.精品| 欧美一性一交| 欧美视频日韩| 国模一区二区三区白浆| 久久欧美中文字幕| 亚洲女性喷水在线观看一区| 亚洲成av人片在www色猫咪| 欧美吞精做爰啪啪高潮| 亚洲激情自拍图| 日韩在线视频国产| 国产精品福利无圣光在线一区| 国产91视觉| 亚洲高潮无码久久| 97视频网站| 91caoporn在线| 成人免费网站www网站高清| 亚洲精品黑牛一区二区三区| 红桃成人av在线播放| 香蕉久久夜色精品| 97se亚洲国产综合在线| 亚洲欧美视频在线观看视频| 欧美影院午夜播放| 亚洲视频欧美视频| 国产精品国产三级国产aⅴ浪潮| 欧美精品久久| 国产不卡123| 亚洲网站三级| 精品大片一区二区| 日韩精品一级二级| 91视频免费观看| 一本久道中文字幕精品亚洲嫩| 日韩精品一区二区三区蜜臀 | 亚洲国产欧美不卡在线观看| 国产特级淫片高清视频| 伊大人久久香线焦宗合一75大| 狠狠操一区二区三区| 日韩欧美黄色| 丝袜诱惑亚洲看片| 中文字幕日韩一区| 日韩欧美电影一区| 2019中文在线观看| 亚洲欧美久久234| 美日韩黄色片| 国产福利在线免费观看| 欧洲亚洲成人| 久久国产精品露脸对白| 亚洲午夜在线视频| 亚洲无线码在线一区观看| 亚洲一区二区三| 黄色a级片免费| 污片在线免费观看| 精品国产一区二区三区久久久樱花 | 五月婷婷之综合激情| 日韩黄色影院| 日本一区精品视频| 久久黄色影院| 一区二区三区四区蜜桃| 亚洲最大中文字幕| 精品午夜一区二区| 日本aⅴ写真网站免费| 亚洲国产尤物| 国产伦理一区| 亚洲一区欧美一区| 色噜噜狠狠狠综合曰曰曰88av| 国产精品有限公司| 成人羞羞视频免费看看| 成av人片在线观看www| 伊人久久大香线蕉精品组织观看| 337p粉嫩大胆噜噜噜噜噜91av | 国产日韩av一区二区| 亚洲成人黄色在线观看| 亚洲www在线观看| 一区二区三区入口| 亚洲综合电影| 国产精品久久久久久久久久妞妞 | 国产成人免费视频网站| 欧美调教femdomvk| 国产精品扒开腿做| 久久精品午夜福利| 国产免费不卡|