七叶笔记 » golang编程 » Go语言中sync.Pool的特点与用法

Go语言中sync.Pool的特点与用法

在Go语言标准库sync包中,Pool类型是放可重用对象值的容器,可以方便地实现对象池,一般在一个GC期间持续有效,其中放置的对象可能在任何时候被删除而不通知。类型Pool的目的是在垃圾回收之间重用内存。它不应该避免垃圾回收,而是让垃圾回收变得更有效。

在使用时,我们声明一个Pool对象。如下:

 p := &sync.Pool{
New: func() interface{} {
return make([]int, 8)
},
}
 

接下来把对象存入临时对象池:

ar := [8]int{1, 2, 3, 45, 67, 8}
p.Put(ar)
 

需要使用时通过Get()方法取出:

 item := p.Get()
 

对象取出后,再次获取对象会产生一个新对象

有时我们可以通过禁止GC来使临时对象池能更长生存期,采用下面方法来实现:

debug.SetGCPercent(debug.SetGCPercent(-1))
 

总之,临时对象池可以在有大量对象产生时使用,来避免频繁的对象声明。对提高系统性能有一定作用,所以在很多知名第三方库上都可以见到其身影。但要注意的是它是临时性的,还是受到GC的影响,所以一般不会用来做连接池。

相关文章