您的位置 首页 golang

golang每日两分钟:sync.Pool

sync.Pool 是一个用来缓存大量重复对象,减少大量对象创建给GC压力,是 sync 异步包中很重要的一种数据结构:

sync.Pool数据结构

say is easy, see code ,看源码:

 type Pool struct {
  // noCopy 表示不支持值拷贝,如果出现值拷贝用 go vet 编译检查的时候会报错
	noCopy noCopy

  // [P]poolLocal,表示每个local的P池
	local     unsafe.Pointer
  // local的长度
	localSize uintptr

  // 也是[P]poolLocal,表示上一个生命周期的local
	victim     unsafe.Pointer
  // victim的长度
	victimSize uintptr

  // 用于创建新对象方法,get获取不到就会调用创建一个新对象,一般由用户传入
	New func() interface{}
}
  

sync.Pool 的用法

sync.Pool的用法很简单,就三个方法:

 //初始化pool对象
var pool sync.Pool

type shikanon struct {
	num int
}

// 创建新对象创建方法
func initPool() {
	pool = sync.Pool{
		New: func() interface{} {
			return &shikanon{num: rand.Int()}
		},
	}
}

func main() {
  initPool()
  // 从pool对象池中取对象
	p1 := pool.Get().(*shikanon)
	fmt.Println("p1", p1.num)

  // 将对象放入pool对象池
	pool.Put(p1)

	p2 := pool.Get().(*shikanon)
  fmt.Println("p2", p2.num)
}  

文章来源:智云一二三科技

文章标题:golang每日两分钟:sync.Pool

文章地址:https://www.zhihuclub.com/88168.shtml

关于作者: 智云科技

热门文章

网站地图