sync.pool对象缓存
- 尝试从私有对象获取
- 私有对象不存在,尝试从当前Processor的共享池获取()
- 如果当前Processpr共享池也是空,那么尝试去从其他Processor的共享池获取
- 如果所有子池都是空,最后用户指定的New函数产生一个新的对象返回
GC会清除sync.pool缓存对象
对象的缓存有效期为下一次GC之前
package pool
import (
"fmt"
"runtime"
"sync"
"testing"
)
func TestSyncPool(t *testing.T){
pool := &sync.Pool{
New: func() interface{} {
fmt.Println("Create a new project")
return 100
},
}
v := pool.Get()
fmt.Println(v)
pool.Put(3)
runtime.GC()
v1,_ := pool.Get().(int)
fmt.Println(v1)
}
本文介绍了Go语言中sync.pool对象缓存机制。获取对象时,先尝试从私有对象获取,若不存在则从当前Processor共享池获取,若为空再尝试从其他Processor共享池获取,若都为空则用New函数产生新对象。GC会清除缓存对象,缓存有效期至下一次GC之前。

被折叠的 条评论
为什么被折叠?



