Skip to content
This repository has been archived by the owner on Nov 19, 2021. It is now read-only.
/ gompool Public archive

Allocation-free and lock-free memory pool library written in golang using treiber stack

License

Notifications You must be signed in to change notification settings

hlts2/gompool

Repository files navigation

gompool

gompool is a simple allocation-free and lock-free memory pool library written in golang using treiber stack

Requirement

  • go (>= 1.8)

Installation

go get github.com/hlts2/gompool

Example

// 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

Benchmark

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

Author

hlts2

LICENSE

gompool released under MIT license, refer LICENSE file.

Releases

No releases published

Packages

No packages published

Languages