repositorypackage
1.0.1
Repository: https://github.com/ravinggo/objectpool.git
Documentation: pkg.go.dev
# README
objectpool
Generic Object Pool
Usage
type Struct struct {
Name string
}
// a = &Struct{}
a:=objectpool.Get[Struct]()
defer objectpool.Put(a)
// len(s) == 0, cap(s) == 16
// s = make([]Struct, 0, 16)
s:=objectpool.GetSlice[Struct](10)
defer objectpool.PutSlice(s)
// len(s) == 0, cap(s) == 128
s1 =objectpool.GetSlice[Struct](127)
defer objectpool.PutSlice(s1)
// m = map[int]int{}
m:= objectpool.GetMap[int,int]()
defer objectpool.PutMap(m)
// Get Sync.Pool of Type
objectpool.GetTypePool[T]() == &sync.Pool{ New: func() any { return new(T) }}
objectpool.GetSliceTypePool[T]() == &sync.Pool{ New: func() any { return make([]T, 0, 16) }}
objectpool.GetTypePool[K,V]() == &sync.Pool{ New: func() any { return make(map[K]V,16) }}
benchmark
goos: windows
goarch: amd64
pkg: github.com/ravinggo/objectpool
cpu: AMD Ryzen 5 5600 6-Core Processor
BenchmarkGetPut
BenchmarkGetPut-12 66342636 18.35 ns/op 0 B/op 0 allocs/op
BenchmarkGetSlicePutSlice
BenchmarkGetSlicePutSlice-12 57361924 21.53 ns/op 0 B/op 0 allocs/op
BenchmarkGetMapPutMap
BenchmarkGetMapPutMap-12 70080768 17.43 ns/op 0 B/op 0 allocs/op
BenchmarkMallocgc
BenchmarkMallocgc-12 46533090 21.80 ns/op 8 B/op 1 allocs/op
BenchmarkMallocgcSlice
BenchmarkMallocgcSlice-12 31850175 35.72 ns/op 128 B/op 1 allocs/op
BenchmarkMallocgcMap
BenchmarkMallocgcMap-12 7050296 161.4 ns/op 688 B/op 2 allocs/op
BenchmarkSyncPool
BenchmarkSyncPool-12 100000000 10.54 ns/op 0 B/op 0 allocs/op
BenchmarkSyncPoolSlice
BenchmarkSyncPoolSlice-12 33001575 35.11 ns/op 24 B/op 1 allocs/op
BenchmarkSyncPoolMap
BenchmarkSyncPoolMap-12 100000000 10.66 ns/op 0 B/op 0 allocs/op
PASS