真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Go的Pool并發(fā)怎么使用

這篇文章主要講解了“Go的Pool并發(fā)怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Go的Pool并發(fā)怎么使用”吧!

渝北網(wǎng)站建設公司創(chuàng)新互聯(lián)公司,渝北網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為渝北千余家提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\成都外貿網(wǎng)站建設要多少錢,請找那個售后服務好的渝北做網(wǎng)站的公司定做!

sync.Pool 用于存儲臨時對象,它將使用完畢的對象存入對象池中,在需要的時候取出來重復使用,目的是為了避免重復創(chuàng)建相同的對象造成 GC 負擔過重。從 Pool 中取出對象時,如果 Pool 中沒有對象,將返回 nil,但是如果給 Pool.New 字段指定了一個函數(shù)的話,Pool 將使用該函數(shù)創(chuàng)建一個新對象返回。

package mainimport (    "fmt"    "sync")func main() {    sp := sync.Pool{        //創(chuàng)建一個Pool,并且實現(xiàn)New()函數(shù)        New: func() interface{}{            return "hello world"        },    }    // 第1次獲取池中值    v1 := sp.Get()    fmt.Println("第1次值:", v1)    //New()返回的是interface{}通過類型斷言來轉換    if v1,ok := v1.(string);ok {        v1= "hello golang"        sp.Put(v1) // 獲取池子中元素 然后修改值    }    // 第2次獲取池中值    v2 := sp.Get()    fmt.Println("第2次值:", v2)    // 第3次獲取池中值    v3 := sp.Get()    //因為池中的對象已經(jīng)沒有了,所以又重新通過New()創(chuàng)建一個新對象,放入池中,然后返回    fmt.Println("第3次值:", v3)}

打印結果

第1次值: hello world第2次值: hello golang第3次值: hello world

嘗試從私有對象獲取

私有對象不存在,嘗試從當前Processor的共享池獲取

如果當前Processor共享池是空的,那么就嘗試去其他Processor的共享池獲取

如果所有子池都是空的,最后就用指定的New 函數(shù)產(chǎn)生一個新的對象返回。

放回

如果私有對象不存在則保存為私有對象

如果私有對象存在,放入當前Processor子池的共享池

生命周期

GC會清除sync.pool緩存的對象

對象的緩存有效期為下一次GC之前

使用

適用與通過復用,降低復雜對象的創(chuàng)建和GC代價

協(xié)程安全,會有鎖的開銷

生命周期受GC影響,不適用于連接池等,需要自己管理生命周期的資源的池化

感謝各位的閱讀,以上就是“Go的Pool并發(fā)怎么使用”的內容了,經(jīng)過本文的學習后,相信大家對Go的Pool并發(fā)怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!


當前題目:Go的Pool并發(fā)怎么使用
轉載注明:http://weahome.cn/article/ieppgd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部