-
Notifications
You must be signed in to change notification settings - Fork 2.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
server.go 当中 从sync.Pool中取出来的[]byte 是否更应该用 *[]byte #773
Comments
在补充一个 benchmark测试, 分别测试用指针, 不用指针, 不用sync.Pool的, 测试结果 如果用指针的话, 性能还是好了不少, 甚至不用sync.Pool性能还还排第二 BenchmarkBufferWithPool1-8 36153943 158.6 ns/op 0 B/op 0 allocs/op 代码如下:
|
测试结果是啥? |
|
用哪个好? |
使用*bytes.Buffer是不是要比*[]byte更好一些,毕竟*[]byte这种形式还是很少见的。 |
已经做过测试, 并更新到上面, 可以看一下, 结论是 *bytes.Buffer 也不是很好, 还是裸 *[]byte 胜出 |
与pool 的size有关系吗?设多大的性能最优? |
本身用 这个pool就是借助他的弹性伸缩能力, 如果配置size 反而不够智能了把 |
我将你的测试程序里的10000改成5000后,池子2和4的线性的,但池子1和3不是线性关系,的确奇怪。 |
他们的性能排序 有变动么, 如果有变动 可以接着讨论测试了, 如果排序没有变化 我感觉还可以维持当前的结论撒 |
V3版本中已经改为使用*[]byte了。 |
建议将V2版本也改成*[]byte. |
具体原因参照: https://staticcheck.io/docs/checks#SA6002
server.go中 对应片段, 改成:
func copyBuffer(dst io.Writer, src io.Reader) error {
buf := lPool.Get().(*[]byte)
defer lPool.Put(buf)
}
The text was updated successfully, but these errors were encountered: