色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Go運行時:4年之后

jf_WZTOguxH ? 來源:InfoQ ? 作者:Michael Knyszek ? 2022-11-30 16:21 ? 次閱讀

自 2018 年以來,Go GC,以及更廣泛的 Go 運行時,一直在穩步改進。近日,Go 社區總結了 4 年來 Go 運行時的一些重要變化。

這些重要變化主要是:

sync.Pool 是一種 GC 感知的重用內存的工具,具有較低的延遲影響,并且能夠比之前更有效地回收內存。(Go 1.13)

Go 運行時能夠更主動地將不需要的內存返回給操作系統,減少了內存消耗和出現內存不足的可能性。這將減少最高 20% 的空閑內存消耗。(Go 1.13 和 1.14)

在許多情況下,Go 運行時能夠更容易地搶占 goroutine,最高可減少 90% 的 stop-the-world 延遲。(Go 1.14)

Go 運行時能夠比以前更有效地管理計時器,特別是在擁有多核 CPU 的機器上。(Go 1.14)

在大多數情況下,現在使用 defer 語句的函數調用的開銷與常規函數調用一樣少。點擊這里觀看 Gophercon 2020 的相關演講。(Go 1.14)

內存分配器的慢路徑對 CPU 核心的伸縮性更好,將吞吐量提升了最多 10%,并將尾部延遲降低了最多 30%,特別是在高度并行的程序中。(Go 1.14 和 1.15)

Go 內存統計數據現在可以通過更細粒度、更靈活、更高效的 API(runtime/metrics 包)來訪問。這將獲取運行時統計信息的延遲減少了兩個數量級(從毫秒到微秒)。(Go 1.16)

Go 調度器在尋找新任務時花費的 CPU 時間減少了 30%。(Go 1.17)

Go 代碼現在在 amd64、arm64 和 ppc64 上遵循基于寄存器的調用約定,將 CPU 效率提升了最多 15%。(Go 1.17 和 1.18)

Go GC 的內部審計和調度已經進行了重新設計,解決了長期存在的各種與效率和健壯性相關的問題。對于 goroutine 占內存使用很大一部分的應用程序來說,這顯著降低了應用程序的尾部延遲(最高達 66%)。(Go 1.18)

Go GC 現在在應用程序空閑時會限制自己的 CPU 使用。這將空閑應用程序的 GC 周期的 CPU 使用降低了 75%,從而減少可能導致作業調度器混淆的 CPU 峰值。(Go 1.19)

這些變化對用戶來說大多是看不見的——他們只需要升級 Go,就可以看到他們所熟悉和喜愛的 Go 代碼運行得更好了。

一個新的“旋鈕”Go 1.19 帶來了一個期待已久的特性,使用這個特性需要做一些額外的工作,但它具備很大的潛力:Go 運行時的軟內存限制。

多年來,Go GC 只有一個調優參數——GOGC。GOGC 允許用戶在 CPU 開銷和內存開銷之間做出權衡。多年來,這個“旋鈕”為 Go 社區提供了很好的服務,被用在各種各樣的場景中。

Go 運行時團隊一直不愿意在 Go 運行時中添加新的旋鈕,他們的理由很充分——每個新的旋鈕代表了配置空間中的一個新的維度,我們需要對其進行測試和維護,而且可能要永遠持續下去。旋鈕的激增也給 Go 開發人員增加了理解和使用它們的負擔,隨著旋鈕的增多,情況會變得愈加困難。因此,Go 運行時總是傾向于用最小配置實現合理的行為。

那么為什么要添加內存限制旋鈕呢?

內存不像 CPU 時間那么具有可互換性。對于 CPU 時間,如果稍等片刻,將來總會得到更多的 CPU 時間。但對于內存,你所擁有的總是有限的。

內存限制解決了兩個問題。

首先,當應用程序的內存使用峰值不可預測時,僅靠 GOGC 幾乎無法防止內存被耗盡。如果只使用 GOGC,Go 運行時根本不知道它有多少可用的內存。通過設置內存限制,運行時能夠意識到什么時候需要更努力地工作以減少內存開銷,從而使運行時能夠健壯地應對瞬時的、可恢復的負載峰值。

第二是為了避免不使用內存限制時出現的內存不足。我們必須根據內存峰值調優 GOGC,而為了保持較低的內存開銷會導致更高的 GC CPU 開銷,即使應用程序沒有處于內存使用峰值且有足夠的可用內存。這在容器化的環境中尤其重要。在容器化的環境中,程序被部署在具有獨立預留內存的容器中。設置內存限制可以為峰值負載提供保護,并可以針對 CPU 開銷更主動地調優 GOGC。

內存限制的設計旨在易用性和健壯性。例如,它是對應用程序中 Go 部分的整個內存占用的限制,而不僅僅是 Go 的堆,因此用戶不需要額外計算 Go 運行時的開銷。運行時還會根據內存限制調整其內存清除策略,以便在內存出現壓力時更主動地將內存返回給操作系統。

雖然內存限制是一個強大的工具,但在使用時仍然要謹慎。其中一個需要注意的地方是,它會讓你的程序陷入 GC 抖動狀態——在這種狀態下,程序運行 GC 的時間過多,導致沒有足夠的時間來處理其他任務。例如,如果內存限制設置得比程序實際需要的內存少,Go 程序可能會崩潰。以前不太可能出現 GC 抖動,除非顯式對 GOGC 進行了大量調優。我們選擇讓內存耗盡而不是陷入抖動狀態,因此作為一種緩解措施,運行時將 GC 限制為總 CPU 時間的 50%,即使這樣會超過內存限制。

所有這些都需要慎重考慮,因此,作為這項工作的一部分,我們發布了一個新的 GC 指南,其中包含了交互式可視化的圖表,以幫助你們理解 GC 成本以及如何操作它們。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10901

    瀏覽量

    212682
  • 內存
    +關注

    關注

    8

    文章

    3052

    瀏覽量

    74222
  • Go
    Go
    +關注

    關注

    0

    文章

    43

    瀏覽量

    12267

原文標題:Go 運行時:4 年之后

文章出處:【微信號:AI前線,微信公眾號:AI前線】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ups主機選購方法,選擇電池運行時間滿足

    時,應考慮以下幾個因素:能力確定要連接到UPS的設備的電源要求。選擇具有足夠容量的UPS,以在所需的持續時間內處理負載。電池運行時間考慮在停電期間需要UPS供電多長時間
    的頭像 發表于 12-06 09:28 ?183次閱讀
    ups主機選購方法,選擇電池<b class='flag-5'>運行時</b>間滿足

    影響逆變器電池狀態的原因,整體運行時

    逆變器的使用需要了解影響電池性能和整體運行時間的因素。讓我們深入探討最大化電源設置的關鍵考慮因素。逆變器效率:逆變器的效率至關重要。當逆變器將電池的DC電能轉換為交流
    的頭像 發表于 10-18 10:41 ?359次閱讀
    影響逆變器電池狀態的原因,整體<b class='flag-5'>運行時</b>間

    C2000?MCU的運行時堆棧大小監測

    電子發燒友網站提供《C2000?MCU的運行時堆棧大小監測.pdf》資料免費下載
    發表于 09-11 09:30 ?0次下載
    C2000?MCU的<b class='flag-5'>運行時</b>堆棧大小監測

    為什么變壓器空載運行時功率因數很低

    變壓器空載運行時功率因數低是一個常見的電氣工程問題。功率因數是指在交流電路中,實際功率與視在功率的比值。在變壓器空載運行時,由于沒有負載,變壓器的輸出功率為零,但仍然存在輸入功率,因此功率因數會很低
    的頭像 發表于 08-26 11:09 ?2225次閱讀

    直線電機在運行時噪音大不大

    眾所周知,直線電機采用了簡化的結構設計,沒用中間的傳動機構,能夠減少振動和共振,使得運行時的噪音得到了較好地控制。 直線電機的主要原材料是磁鐵和銅線,由此也能看出,它的工作原理是基于磁懸浮技術,而磁懸浮技術
    的頭像 發表于 08-12 11:37 ?472次閱讀
    直線電機在<b class='flag-5'>運行時</b>噪音大不大

    三菱plc累計運行時間怎么編程

    具有重要意義。本文將詳細介紹如何使用三菱PLC編程實現累計運行時間的統計功能。 一、概述 累計運行時間是指設備或系統在一定時間內的總運行時間。在工業生產中,對設備的累計運行時間進行統計
    的頭像 發表于 06-20 11:31 ?2477次閱讀

    變頻器帶動電機運行時發抖的原因及處理方法

    變頻器作為現代工業控制領域的重要設備,廣泛應用于電機調速控制中。然而,在實際應用中,有時會遇到變頻器帶動電機運行時產生抖動的問題。這種抖動不僅影響電機的正常運行,還可能對生產效率和設備壽命造成
    的頭像 發表于 05-31 14:43 ?5963次閱讀

    如何在運行時從HSM對SWAP UCB進行編程?

    我使用的是 AURIX TC397 開發板,可以在運行時從 Tricore 域對 SWAP UCB 進行編程,但無法從 HSM 域進行編程。 我需要這種功能,以便在固件更新后交換存儲庫。 是否有我
    發表于 05-31 06:37

    在DMA運行時,其他的數據轉移會不會因DMA占用導致這些東西延時處理?

    DMA運行時占用系統總線,所以不經過CPU,速度較快,但有一個問題我不清楚,在DMA運行時,其他的數據轉移例如引腳賦值、讀引腳、數組內的數據處理等經過CPU的數據傳輸會不會因DMA占用導致這些東西延時處理?
    發表于 05-15 07:45

    STM8S在IAR軟件仿真Simulator怎么查看運行時間?

    STM8S 在IAR軟件仿真Simulator怎么查看運行時間?在某些芯片通信時,會要求延時5us,10us,150ms等,這些延時不需要太精確,只要大概就好,但怎么在Simulator仿真里能通過斷點查看,即兩個斷點之間的運行時間呢? 除了通過IO輸出外圍用儀器測試,能
    發表于 05-09 07:48

    移植stm32f4Discovery的usb虛擬串口程序到rtthread, 運行時出現USBD_OTG_ISR_Handler()中斷函數溢出的原因?

    移植stm32f4Discovery的usb 虛擬串口程序到rtthread, 運行時出現 USBD_OTG_ISR_Handler()中斷函數溢出。 中斷函數不是任務,不知道在哪里設置中斷函數
    發表于 04-29 09:07

    stm32cubeIDE代碼運行時間如何查看?

    stm32cubeIDE 代碼運行時間,如何查看?就如 keil 調試時候那樣,可以測試代碼的運行時間。但是在stm32cubeIDE 中,一直沒有找到這個功能,不知道哪位高人可以提示下在哪里查看的?
    發表于 04-16 08:10

    stm32做https的server ,serverkeychange運行時間10多s怎么優化?

    stm32做https的server ,serverkeychange這一步運行時間10多s,求優化辦法
    發表于 03-27 08:03

    使用STM32CubeMX生成的keil文件,在keil中運行時報錯的原因?

    在使用STM32CubeMX過程中,生成的keil文件。 file:///C:/Users/Zhanggp/AppData/Local/Temp/ksohtml11808/wps1.jpg在keil 中運行時出現了報錯.
    發表于 03-26 07:10

    嵌入式電子控制單元(ECU)中如何準確找出運行時使用的RAM量?

    我知道嵌入式軟件構建工具報告程序閃存使用情況。我認為他們也報告了 RAM 使用情況,但他們是否報告了最大 RAM 使用率? 生成工具可能不知道在運行時將使用多少堆。是否還有其他構建工具不知道的 RAM 使用情況? 如何準確找出運行時使用的RAM量?
    發表于 01-31 07:48
    主站蜘蛛池模板: 亚洲免费网站观看视频 | 老司机福利在视频在ae8 | 好满射太多了装不下了视频 | 成人免费肉动漫无遮网站 | 99视频这里只有精品国产 | 苍井空小公主qvod | 帅哥操美女 | 日本一二三区在线视频 | 国产高清在线露脸一区 | xxxxxx日本处大片免费看 | 国产久久精品热99看 | 亚洲精品AV无码永久无码 | 在线免费福利 | 日日碰狠狠躁久久躁综合网 | 久久亚洲精品成人 | 国产亚洲精品高清视频免费 | 国产在线亚洲精品观看不卡 | 欧美极限扩肛 | 云南14学生真实初次破初视频 | 久久精品国产久精国产果冻传媒 | 果冻传媒APP免费网站在线观看 | 秋霞电影网视频一区二区三区 | 一本之道高清在线观看一区 | 亚洲国产AV精品卡一卡二 | 无人区日本电影在线观看高清 | 国产午夜亚洲精品区 | 97久久伊人精品影院 | 色戒床震视频片段 | 成人网站国产在线视频内射视频 | 国产免费午夜 | 玖玖爱这里只有精品视频 | 午夜片神马影院福利 | 韩国无遮羞禁动漫在线观看96 | 免费国产久久拍久久爱 | 免费观看a视频 | 97caopeng | 久久99国产综合精品AV蜜桃 | 久久在精品线影院 | 亚洲三级在线中文字幕 | 丝瓜视频樱桃视频在线观看免费 | 日本久久和电影 |