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 影响, 不适合于做连接池等, 需自己管理声明周期的资源的池化
相关推荐
东方醴歌2 小时前
VMware安装飞牛私有云fnOS并挂载小雅Alist实现异地远程访问
开发语言·后端·golang
LuckyLay2 小时前
LeetCode算法题(Go语言实现)_39
算法·leetcode·golang
东方醴歌4 小时前
本地搭建直播录屏应用并实现使用浏览器远程控制直播间录屏详细教程
开发语言·后端·golang
ILHONG4 小时前
码云如何构建自己的golang内源包
开发语言·后端·golang
不知名美食探索家15 小时前
【11】Redis快速安装与Golang实战指南
redis·golang·bootstrap
普通网友16 小时前
内置AI与浏览器的开源终端Wave Terminal安装与远程连接内网服务器教程
开发语言·后端·golang
行思理17 小时前
go语言应该如何学习
开发语言·学习·golang
returnShitBoy17 小时前
Go语言中的垃圾回收是如何工作的?
java·jvm·golang
普通网友18 小时前
如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板
开发语言·后端·golang
LuckyLay1 天前
LeetCode算法题(Go语言实现)_38
算法·leetcode·golang