Go

时间:2023-11-30 本站 点击:0

前言

sync.Pool 是临时对象池,存储的是临时对象,不可以用它来存储 socket 长连接和数据库连接池等。

sync.Pool 本质是用来保存和复用临时对象,以减少内存分配,降低 GC 压力,比如需要使用一个对象,就去 Pool 里面拿,如果拿不到就分配一份,这比起不停生成新的对象,用完了再等待 GC 回收要高效的多。

sync.Pool

sync.Pool 的使用很简单,看下示例代码:

packagestudentimport("sync")typestudentstruct{NamestringAgeint}varstudentPool=&sync.Pool{New:func()interface{}{returnnew(student)},}funcNew(namestring,ageint)*student{stu:=studentPool.Get().(*student)stu.Name=namestu.Age=agereturnstu}funcRelease(stu*student){stu.Name=""stu.Age=0studentPool.Put(stu)}

当使用 student 对象时,只需要调用 New() 方法获取对象,获取之后使用 defer 函数进行释放即可。

stu:=student.New("tom",30)deferstudent.Release(stu)//业务逻辑...

关于 sync.Pool 里面的对象具体是什么时候真正释放,是由系统决定的。

小结

一定要注意存储的是临时对象!

一定要注意 Get 后,要调用 Put

以上,希望对你能够有所帮助。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Golang/4597.html