Files
godoxy-yusing/internal/utils/synk/pool_bench_test.go
yusing 4a000316be feat(pool): enhance byte pool and add comprehensive tests
- Introduced new benchmarks for GetLarge and GetLargeUnsized methods to evaluate performance with varying buffer sizes.
- Added a new test file for BytesPool, covering various scenarios including sized and unsized buffer retrieval, buffer splitting, and memory safety.
- Improved memory management in the BytesPool implementation to ensure efficient buffer reuse and capacity handling.
2025-09-05 16:19:04 +08:00

70 lines
1.4 KiB
Go

package synk
import (
"slices"
"testing"
)
var sizes = []int{1024, 4096, 16384, 65536, 32 * 1024, 128 * 1024, 512 * 1024, 1024 * 1024, 2 * 1024 * 1024}
func BenchmarkBytesPool_GetSmall(b *testing.B) {
for b.Loop() {
bytesPool.Put(bytesPool.GetSized(1024))
}
}
func BenchmarkBytesPool_MakeSmall(b *testing.B) {
for b.Loop() {
_ = make([]byte, 1024)
}
}
func BenchmarkBytesPool_GetLarge(b *testing.B) {
for b.Loop() {
buf := bytesPool.GetSized(DropThreshold / 2)
buf[0] = 1
bytesPool.Put(buf)
}
}
func BenchmarkBytesPool_GetLargeUnsized(b *testing.B) {
for b.Loop() {
buf := slices.Grow(bytesPool.Get(), DropThreshold/2)
buf = append(buf, 1)
bytesPool.Put(buf)
}
}
func BenchmarkBytesPool_MakeLarge(b *testing.B) {
for b.Loop() {
buf := make([]byte, DropThreshold/2)
buf[0] = 1
_ = buf
}
}
func BenchmarkBytesPool_GetAll(b *testing.B) {
for i := range b.N {
bytesPool.Put(bytesPool.GetSized(sizes[i%len(sizes)]))
}
}
func BenchmarkBytesPool_GetAllUnsized(b *testing.B) {
for i := range b.N {
bytesPool.Put(slices.Grow(bytesPool.Get(), sizes[i%len(sizes)]))
}
}
func BenchmarkBytesPool_MakeAll(b *testing.B) {
for i := range b.N {
_ = make([]byte, sizes[i%len(sizes)])
}
}
func BenchmarkBytesPoolWithMemory(b *testing.B) {
pool := GetBytesPoolWithUniqueMemory()
for i := range b.N {
pool.Put(slices.Grow(pool.Get(), sizes[i%len(sizes)]))
}
}