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 影响, 不适合于做连接池等, 需自己管理声明周期的资源的池化
相关推荐
王中阳Go2 小时前
字节跳动的微服务独家面经
微服务·面试·golang
qq_172805597 小时前
GO GIN 推荐的库
开发语言·golang·gin
=(^.^)=哈哈哈8 小时前
Golang如何优雅的退出程序
开发语言·golang·xcode
白总Server12 小时前
MongoDB解说
开发语言·数据库·后端·mongodb·golang·rust·php
liupenglove16 小时前
golang操作mysql利器-gorm
mysql·golang
Rookie_explorers17 小时前
Linux下go环境安装、环境配置并执行第一个go程序
linux·运维·golang
做技术的Pandaer17 小时前
Go 第二期
开发语言·golang
wn53118 小时前
【Go - 类型断言】
服务器·开发语言·后端·golang
GoppViper19 小时前
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
笔记·git·后端·学习·golang·github·源代码管理
_小许_1 天前
Go语言的io输入输出流
golang