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 影响, 不适合于做连接池等, 需自己管理声明周期的资源的池化
相关推荐
__AtYou__3 小时前
Golang | Leetcode Golang题解之第557题反转字符串中的单词III
leetcode·golang·题解
程序猿-瑞瑞5 小时前
11 go语言(golang) - 数据类型:结构体
开发语言·golang
宋发元8 小时前
Go 数据库查询与结构体映射
数据库·oracle·golang
清北_8 小时前
Go常见框架对比
前端·golang·gin
老大白菜9 小时前
goframe开发一个企业网站 验证码17
运维·docker·容器·golang·goframe
杜杜的man11 小时前
【go从零单排】Stateful Goroutines(有状态的 goroutines)
开发语言·后端·golang
Chrikk11 小时前
Go-一文打尽基础语法实例
开发语言·后端·golang
研究司马懿11 小时前
【Golang】Go语言环境安装
开发语言·后端·云原生·golang·二开
恬淡虚无真气从之11 小时前
go 下划线 _ 被称为“空白标识符
开发语言·后端·golang
jerry60912 小时前
go语言 分布式一致
开发语言·分布式·golang