Go语言学习10-sync.Pool对象缓存

Go语言学习10-sync.Pool对象缓存

sync.Pool 对象获取

  • 尝试从私有对象获取
  • 私有对象不存在, 尝试从当前 Processor 的共享池获取
  • 如果当前 Processor 共享池也是空的, name就尝试去其他 Processor 的共享池获取
  • 如果所有子池都是空的, 最后就用用户指定的 New 函数产生一个新的对象返回

sync.Pool 对象的放回

  • 如果私有对象不存在则保存为私有对象
  • 如果私有对象存在, 放入当前 Processor 子池的共享池中

使用 sync.Pool

go 复制代码
pool := &sync.Pool{
	New: func() interface{} {
		return 0
	},
}

arry := pool.Get().(int)
	...
pool.Put(10)

sync.Pool 对象的生命周期

  • GC 会清除 sync.pool 缓存的对象
  • 对象的缓存有效期为下一次 GC 之前

sync.Pool 总结

  • 适合于通过复用, 降低复杂对象的创建 和 GC 代价
  • 协程安全, 会有锁的开销
  • 声明周期受 GC 影响, 不适合于做连接池等, 需自己管理声明周期的资源的池化
相关推荐
不会写DN2 小时前
Golang中的map的key可以是哪些类型?可以嵌套map吗?
后端·golang·go
止语Lab6 小时前
Go vs Java GC:同一场延迟战争的两条路
java·开发语言·golang
MmeD UCIZ9 小时前
GO 快速升级Go版本
开发语言·redis·golang
mOok ONSC10 小时前
对基因列表中批量的基因进行GO和KEGG注释
开发语言·数据库·golang
Achou.Wang12 小时前
go语言中类型别名和定义类型之间的区别
服务器·golang
geovindu12 小时前
go: Composite Pattern
设计模式·golang·组合模式
XMYX-013 小时前
18 - Go 等待协程:WaitGroup 使用与坑
开发语言·golang
XMYX-013 小时前
19 - Go 并发限制:限流与控制并发数
开发语言·golang
geovindu15 小时前
go: Singleton Pattern
单例模式·设计模式·golang
U盘失踪了1 天前
Go 结构体
笔记·golang