我在Github上看到了问题,它说sync.Pool应该只使用带有指针类型的,例如:
var TPool = sync.Pool{
New: func() interface{} {
return new(T)
},
}说得通吗?那么return T{}呢?选择哪一个更好,为什么?
发布于 2019-01-14 10:03:39
sync.Pool的全部目的是避免(昂贵的)分配。大型的缓冲区,等等。你分配了几个缓冲区,它们留在内存中,可以重用。因此指针的使用。
但是在这里,您将在每一步中复制值,从而使目的落空。(假设您的T是“正常”结构,而不是类似于SliceHeader)
发布于 2019-01-14 10:03:23
这是不必要的。在大多数情况下,它应该是一个指针,因为您希望共享一个对象,而不是复制。
在某些用例中,这可能是一个非指针类型,类似于某个外部资源的id。我可以想象一个由字符串表示的路径池(挂载磁盘驱动器),其中正在执行一些大型文件操作。
https://stackoverflow.com/questions/54179128
复制相似问题