Golang sync.Pool详解

Golang中sync.Pool用来提高对象复用几率,减少gc的压力,减少内存分配,它是线程安全的,常用来存储并复用临时对象。

原理

为了减小并发中锁的竞争,sync.pool为每个P(对象cpu线程)分配一个子池子poolLocal,每个poolLocal有private对象和shared共享列表对象,private对象只有对应的P可访问,无需加锁, shared共享列表对象可被其它P共享,需要加锁。

 

Pool结构体

type Pool struct {
	noCopy noCopy   //该对象不能被copy使用

	local     unsafe.Pointer // [p]poolLocal,固定长度
	localSize uintptr        //本地缓冲池poolLocal的数量

	New func() interface{}  //用户自定义的用于生成对象的方法
}

 

Get函数

作用:从Pool中获取一个对象,如果获取不到并且New函数不为空,则通过New创建一个对象并返回。否则返回nil

func (p *Pool) Get() interface{} {
	if race.Enabled {
		race.Disable()
	}
	//获取当前线程的poolLocal
	l := 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值