Go的Pool并发怎么使用

免费建站   2024年05月09日 15:09  

这篇文章主要讲解了“Go的Pool并发怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go的Pool并发怎么使用”吧!

sync. 用于存储临时对象,它将使用完毕的对象存入对象池中,在需要的时候取出来重复使用,目的是为了避免重复创建相同的对象造成 GC 负担过重。从 中取出对象时,如果 中没有对象,将返回 nil,但是如果给 .New 字段指定了一个函数的话, 将使用该函数创建一个新对象返回。

packagemainimport("fmt""sync")funcmain(){sp:=sync.Pool{//创建一个Pool,并且实现New()函数New:func()interface{}{return"helloworld"},}//第1次获取池中值v1:=sp.Get()fmt.Println("第1次值:",v1)//New()返回的是interface{}通过类型断言来转换ifv1,ok:=v1.(string);ok{v1="hellogolang"sp.Put(v1)//获取池子中元素然后修改值}//第2次获取池中值v2:=sp.Get()fmt.Println("第2次值:",v2)//第3次获取池中值v3:=sp.Get()//因为池中的对象已经没有了,所以又重新通过New()创建一个新对象,放入池中,然后返回fmt.Println("第3次值:",v3)}

打印结果

第1次值:helloworld第2次值:hellogolang第3次值:helloworld

尝试从私有对象获取

私有对象不存在,尝试从当前Processor的共享池获取

如果当前Processor共享池是空的,那么就尝试去其他Processor的共享池获取

如果所有子池都是空的,最后就用指定的New 函数产生一个新的对象返回。

放回

如果私有对象不存在则保存为私有对象

如果私有对象存在,放入当前Processor子池的共享池

生命周期

GC会清除sync.pool缓存的对象

对象的缓存有效期为下一次GC之前

使用

适用与通过复用,降低复杂对象的创建和GC代价

协程安全,会有锁的开销

生命周期受GC影响,不适用于连接池等,需要自己管理生命周期的资源的池化

感谢各位的阅读,以上就是“Go的Pool并发怎么使用”的内容了,经过本文的学习后,相信大家对Go的Pool并发怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

域名注册
购买VPS主机

您或许对下面这些文章有兴趣:                    本月吐槽辛苦排行榜

看贴要回贴有N种理由!看帖不回贴的后果你懂得的!


评论内容 (*必填):
(Ctrl + Enter提交)   

部落快速搜索栏

各类专题梳理

网站导航栏

X
返回顶部