added preload and streaming buffer pool

This commit is contained in:
ston1th 2022-08-19 19:01:28 +02:00
commit b010b3a93e
5 changed files with 70 additions and 20 deletions

View file

@ -4,7 +4,6 @@ package fs
import (
"io"
"sync"
)
var Discard io.Writer = discard{}
@ -21,30 +20,33 @@ func (discard) WriteString(s string) (int, error) {
return len(s), nil
}
const DefaultBufferSize = 8192
const (
StreamingBufferSize = 32768
DefaultBufferSize = 8192
)
var blackHolePool = sync.Pool{
New: func() any {
b := make([]byte, DefaultBufferSize)
func poolNewFunc(size int) func() *[]byte {
return func() *[]byte {
b := make([]byte, size)
return &b
},
}
}
var (
streamingPool = newPool(poolNewFunc(StreamingBufferSize))
blackHolePool = newPool(poolNewFunc(DefaultBufferSize))
)
func SetBufferSize(size int) bool {
if size < 0 || size == DefaultBufferSize {
return false
}
blackHolePool = sync.Pool{
New: func() any {
b := make([]byte, size)
return &b
},
}
blackHolePool = newPool(poolNewFunc(size))
return true
}
func (discard) ReadFrom(r io.Reader) (n int64, err error) {
bufp := blackHolePool.Get().(*[]byte)
bufp := blackHolePool.Get()
readSize := 0
for {
readSize, err = r.Read(*bufp)