最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang之sync.Pool對象池對象重用機制總結(jié)

 更新時間:2023年07月13日 08:25:39   作者:編程妲己  
這篇文章主要對Golang的sync.Pool對象池對象重用機制做了一個總結(jié),文中有相關(guān)的代碼示例和圖解,具有一定的參考價值,需要的朋友可以參考下

sync.Pool作用

對象重用機制,為了減少GC,sync.Pool是可伸縮的,并發(fā)安全的

兩個結(jié)構(gòu)體

type Pool struct {
    local     unsafe.Pointer // local fixed-size per-P pool, actual type is [P]poolLocal
    localSize uintptr        // size of the local array
    // New optionally specifies a function to generate
    // a value when Get would otherwise return nil.
    // It may not be changed concurrently with calls to Get.
    New func() interface{}
}
// Local per-P Pool appendix.
type poolLocal struct {
    private interface{}   // Can be used only by the respective P.
    shared  []interface{} // Can be used by any P.
    Mutex                 // Protects shared.
    pad     [128]byte     // Prevents false sharing.
}

Pool是提供外部使用的對象,Pool有兩個重要的成員,local是一個poolLocal數(shù)組,localSize是工作線程的數(shù)量( runtime.GOMAXPROCS(0)),Pool為每個線程分配一個poolLocal對象

寫入和讀取

  • Pool.Get 先獲取當(dāng)前線程私有值(poolLocal.private)獲取
    否則則從共享列表(poolLocal.shared)獲取
    否則則從其他線程的共享列表獲取
    否則直接通過New()分配一個返回值
  • Pool.Put 當(dāng)前線程私有制為空,賦值給私有值
    否則追加到共享列表

sync.Pool注意點

臨時性,當(dāng)發(fā)生GC時,Pool的對象會被清除,并且不會有通知
無狀態(tài),當(dāng)前線程中的PoolLocal.shared的對象可能會被其他線程偷走

大規(guī)模Goroutine的瓶頸

會對垃圾回收(gc)造成負(fù)擔(dān),需要頻繁的釋放內(nèi)存
雖然goroutine只分配2KB,但是大量gorotine會消耗完內(nèi)存,并且gc也是goroutine調(diào)用的

原理和作用

原理類似是IO多路復(fù)用,就是盡可能復(fù)用,池化的核心優(yōu)勢就在于對goroutine的復(fù)用。此舉首先極大減輕了runtime調(diào)度goroutine的壓力,其次,便是降低了對內(nèi)存的消耗

到此這篇關(guān)于Golang之sync.Pool對象池對象重用機制總結(jié)的文章就介紹到這了,更多相關(guān)Golang sync.Pool對象重用機制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • Golang橋接模式講解和代碼示例

    Golang橋接模式講解和代碼示例

    橋接是一種結(jié)構(gòu)型設(shè)計模式,可將業(yè)務(wù)邏輯或一個大類拆分為不同的層次結(jié)構(gòu),從而能獨立地進(jìn)行開發(fā),本文將通過代碼示例詳細(xì)給大家介紹一下Golang橋接模式,需要的朋友可以參考下
    2023-06-06
  • Go語言開發(fā)代碼自測絕佳go?fuzzing用法詳解

    Go語言開發(fā)代碼自測絕佳go?fuzzing用法詳解

    這篇文章主要為大家介紹了Go語言開發(fā)代碼自測絕佳go?fuzzing用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go如何實現(xiàn)HTTP請求限流示例

    Go如何實現(xiàn)HTTP請求限流示例

    本篇文章主要介紹了Go如何實現(xiàn)HTTP請求限流示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Golang 函數(shù)執(zhí)行時間統(tǒng)計裝飾器的一個實現(xiàn)詳解

    Golang 函數(shù)執(zhí)行時間統(tǒng)計裝飾器的一個實現(xiàn)詳解

    這篇文章主要介紹了Golang 函數(shù)執(zhí)行時間統(tǒng)計裝飾器的一個實現(xiàn)詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Go語言字符串操作指南:簡單易懂的實戰(zhàn)技巧

    Go語言字符串操作指南:簡單易懂的實戰(zhàn)技巧

    本文將介紹Go語言中字符串的實戰(zhàn)操作,通過本文的學(xué)習(xí),讀者將掌握Go語言中字符串的常用操作,為實際開發(fā)提供幫助,需要的朋友可以參考下
    2023-10-10
  • 解析Golang中的鎖競爭問題

    解析Golang中的鎖競爭問題

    這篇文章主要介紹了golang中的鎖競爭問題,本文通過實例代碼給大家詳細(xì)講解,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • Go語言操作MySql數(shù)據(jù)庫的詳細(xì)指南

    Go語言操作MySql數(shù)據(jù)庫的詳細(xì)指南

    數(shù)據(jù)的持久化是程序中必不可少的,所以編程語言中對數(shù)據(jù)庫的操作是非常重要的一塊,這篇文章主要給大家介紹了關(guān)于Go語言操作MySql數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • GoLang橋接模式的實現(xiàn)示例

    GoLang橋接模式的實現(xiàn)示例

    橋接模式是一種結(jié)構(gòu)型設(shè)計模式,通過橋接模式可以將抽象部分和它的實現(xiàn)部分分離,本文主要介紹了GoLang橋接模式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Go語言斷言和類型查詢的實現(xiàn)

    Go語言斷言和類型查詢的實現(xiàn)

    Go語言變量類型包含基礎(chǔ)類型和復(fù)合類型,類型斷言一般是對基礎(chǔ)類型的處理,本文主要介紹了Go語言斷言和類型查詢的實現(xiàn),感興趣的可以了解一下
    2024-01-01
  • golang定時器Timer的用法和實現(xiàn)原理解析

    golang定時器Timer的用法和實現(xiàn)原理解析

    這篇文章主要介紹了golang定時器Ticker,本文主要來看一下Timer的用法和實現(xiàn)原理,需要的朋友可以參考以下內(nèi)容
    2023-04-04

最新評論

天气| 通山县| 嫩江县| 米泉市| 梁平县| 怀化市| 梁平县| 肥乡县| 定远县| 岚皋县| 高尔夫| 安仁县| 高台县| 开化县| 雷山县| 德令哈市| 同德县| 灯塔市| 旺苍县| 湄潭县| 汾西县| 洮南市| 万年县| 西城区| 辉县市| 章丘市| 娄烦县| 宣威市| 七台河市| 侯马市| 嘉峪关市| 定襄县| 永顺县| 怀安县| 含山县| 乌鲁木齐市| 丰原市| 沙洋县| 勐海县| 平安县| 阿拉善右旗|