Kang Hu
Results
1
issues of
Kang Hu
刚看了一篇[文章](https://blog.mike.norgate.xyz/unlocking-go-slice-performance-navigating-sync-pool-for-enhanced-efficiency-7cb63b0b453e)写如何正确使用`sync.Pool`提升`slice`的性能,结论是推荐使用指向`slice`的指针。 我的理解:使用`slice`本体版本的`sync.Pool`(当前gost的使用方式)其实已经可以节省新建`slice`时为底层数组申请空间和初始化的开销了。但`slice`的头结构(共24字节)会在被Put时从栈空间逃逸进入堆空间,造成这24字节的内存不可被立即释放或复用,只能等待`runtime`的下一次自动垃圾回收。而使用指向`slice`的指针就可以避免这个问题。 我用三种方案跑了一下Benchmark,的确有差别。目前我对`sync.Pool`的了解还不是很深入,所以还需大佬确认。 pool_test.go ``` package pool import ( "sync" "testing" ) //go:noinline func doSomething(buf []byte) { buf[0] = 123 } func BenchmarkRaw(b *testing.B) { b.ResetTimer() for i := 0;...