新聞中心
什么是sync.Pool?
sync.Pool是用來保存可以被重復(fù)使用的臨時(shí)對(duì)象,以便在以后的同類操作中可以重復(fù)使用,從而避免了反復(fù)創(chuàng)建和銷毀臨時(shí)對(duì)象帶來的消耗以及對(duì)GC造成的壓力。常用池化技術(shù)來提高程序的性能,例如連接池、線程池等。sync.Pool是并發(fā)安全的,可以在多個(gè)goroutine中并發(fā)調(diào)用sync.Pool存取對(duì)象。

創(chuàng)新互聯(lián)建站,為您提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站營銷推廣、網(wǎng)站開發(fā)設(shè)計(jì),對(duì)服務(wù)搬家公司等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)公司成立于2013年,提供專業(yè)網(wǎng)站制作報(bào)價(jià)服務(wù),我們深知市場(chǎng)的競(jìng)爭(zhēng)激烈,認(rèn)真對(duì)待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!
在Golang的很多標(biāo)準(zhǔn)庫和很多知名的開源庫中,都可以看到大量使用sync.Pool的場(chǎng)景。例如encoding/json包中的Valid方法使用sync.Pool創(chuàng)建scanner對(duì)象,Gin框架使用sync.Pool來復(fù)用每個(gè)請(qǐng)求都會(huì)創(chuàng)建的gin.Context對(duì)象。
但需要注意的是,sync.Pool保存的對(duì)象隨時(shí)可能在不發(fā)出通知的情況下被清除,因此不能使用sync.Pool存儲(chǔ)需要持久化的對(duì)象。
sync.Pool使用方法
首先看一段示例代碼:
package main
import "sync"
type scanner struct {
Name string
}
func main() {
pool := sync.Pool{
New: func() interface{} {
return &scanner{
Name: "json",
}
},
}
scan := pool.Get().(*scanner)
println(scan.Name)
pool.Put(scan)
}初始化sync.Pool的時(shí)候,需要提供一個(gè)對(duì)象的構(gòu)造函數(shù)New。使用Get從對(duì)象池中獲取對(duì)象,使用Put將對(duì)象放回到對(duì)象池。
可以看出sync.Pool的使用方法非常簡(jiǎn)單,對(duì)外只提供三個(gè)方法:New、Get和Put
- New方法,使用Get方法從對(duì)象池中獲取對(duì)象的時(shí)候,對(duì)象池中如果沒有,會(huì)調(diào)用New方法創(chuàng)建一個(gè)新的對(duì)象。
- Get方法,從對(duì)象池中獲取一個(gè)對(duì)象。
- Put方法,將對(duì)象放回到對(duì)象池,下次Get的時(shí)候可以復(fù)用。
小結(jié)
本文介紹了sync.Pool的作用和使用方法,下篇文章深入源碼解析sync.Pool。
當(dāng)前文章:Golang中Sync.Pool詳解及使用方法
鏈接分享:http://m.fisionsoft.com.cn/article/ccsdjjo.html


咨詢
建站咨詢
