gompool is a simple allocation-free and lock-free memory pool library written in golang using treiber stack
- go (>= 1.8)
go get github.com/hlts2/gompool
// Create 10 pools of `*bytes.Buffer`
pools := gompool.NewGompool(10, func() interface{} {
return &bytes.Buffer{}
})
pool1 := pools.Get()
pool2 := pools.Get()
buf1 := pool1.Value.(*bytes.Buffer)
buf1.WriteString("Hello world1")
buf2 := pool2.Value.(*bytes.Buffer)
buf2.WriteString("Hello world2")
pools.Put(pool1) // Return pool1 to pools
pools.Put(pool2) // Return pool2 to pools
gompool vs sync.Pool(Standard library)
goos: darwin
goarch: amd64
pkg: github.com/hlts2/gompool
BenchmarkGompool-4 30000000 54.0 ns/op 0 B/op 0 allocs/op
BenchmarkGompool-4 30000000 54.2 ns/op 0 B/op 0 allocs/op
BenchmarkGompool-4 30000000 55.2 ns/op 0 B/op 0 allocs/op
BenchmarkGompool-4 30000000 54.2 ns/op 0 B/op 0 allocs/op
BenchmarkGompool-4 30000000 53.7 ns/op 0 B/op 0 allocs/op
BenchmarkDefaultPool-4 20000000 66.8 ns/op 0 B/op 0 allocs/op
BenchmarkDefaultPool-4 20000000 67.4 ns/op 0 B/op 0 allocs/op
BenchmarkDefaultPool-4 20000000 67.4 ns/op 0 B/op 0 allocs/op
BenchmarkDefaultPool-4 20000000 68.0 ns/op 0 B/op 0 allocs/op
BenchmarkDefaultPool-4 20000000 68.1 ns/op 0 B/op 0 allocs/op
PASS
ok github.com/hlts2/gompool 15.530s
gompool released under MIT license, refer LICENSE file.