|
|
|
|
|
by cplli
440 days ago
|
|
What the top commenter probably failed to mention, and jensneuse tried to explain is that sync.Pool makes an assumption that the size cost of pooled items are similar. If you are pooling buffers (eg: []byte) or any other type with backing memory which during use can/will grow beyond their initial capacity, can lead to a scenario where backing arrays which have grown to MB capacities are returned by the pool to be used for a few KB, and the KB buffers are returned to high memory jobs which in turn grow the backing arrays to MB and return to the pool. If that's the case, it's usually better to have non-global pools, pool ranges, drop things after a certain capacity, etc.: https://github.com/golang/go/issues/23199
https://github.com/golang/go/blob/7e394a2/src/net/http/h2_bu... |
|