recycleBuffer is for effective buffer usage in golang and thread-safe.
It is wrote with very short and simple code.
Use following command in your terminal.
go get github.com/DiyLecko/recycleBuffer
- Import
import "github.com/DiyLecko/recycleBuffer" - Init with
var rb *recycleBuffer.RecycleBuffer = recycleBuffer.Init(8192) // 1th param is bufferSize. - Use
buf := <-rb.Getto get buffer - Use
rb.Give<- bufto free buffer.
here is an example.
// recycleBuffer_test.gopackage recycleBuffer
import (
"math/rand""runtime""testing""time"
)
funcinit() {
runtime.GOMAXPROCS(runtime.NumCPU())
}
funcTestRecycleBuffer(t*testing.T) {
rb:=Init(8192)
buf:=<-rb.Getrb.Give<-buf
}
vardoneTest2chanbool=make(chanbool)
varendCountTest2int=100vartestCountTest2int=10varcountText2int=0functestRecycleBuffer2(rb*RecycleBuffer) {
fori:=0; i<testCountTest2; i++ {
time.Sleep(time.Millisecond*time.Duration(rand.Int63()%500))
buf:=<-rb.Getgofunc() {
time.Sleep(time.Millisecond*time.Duration(rand.Int63()%1000))
rb.Give<-bufcountText2++ifcountText2==endCountTest2*testCountTest2 {
doneTest2<-true
}
}()
}
}
funcTestRecycleBuffer2(t*testing.T) {
rb:=Init(8192)
fori:=0; i<endCountTest2; i++ {
gotestRecycleBuffer2(rb)
}
<-doneTest2t.Logf("buffer count : %d\n", rb.GetBufferCount())
}result is
=== RUN TestRecycleBuffer
--- PASS: TestRecycleBuffer (0.00s)
=== RUN TestRecycleBuffer2
--- PASS: TestRecycleBuffer2 (4.58s)
recycleBuffer_test.go:50: buffer count : 206
PASS
ok recycleBuffer 4.588s
In above example, buffer is made 1000 times. But in result, buffer is made only 206 times.