diff options
Diffstat (limited to 'core/pool.go')
| -rw-r--r-- | core/pool.go | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/core/pool.go b/core/pool.go new file mode 100644 index 0000000..484b342 --- /dev/null +++ b/core/pool.go | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | package core | ||
| 2 | |||
| 3 | import "sync" | ||
| 4 | |||
| 5 | |||
| 6 | const ( | ||
| 7 | DefaultBufferSize = 1024 | ||
| 8 | MaxBufferSize = 64 * 1024 | ||
| 9 | ) | ||
| 10 | |||
| 11 | var bytesPool = sync.Pool{ | ||
| 12 | New: func () any { | ||
| 13 | b := make([]byte, DefaultBufferSize) | ||
| 14 | return &b | ||
| 15 | }, | ||
| 16 | } | ||
| 17 | |||
| 18 | func GetBuffer(size int) []byte { | ||
| 19 | bufPtr := bytesPool.Get().(*[]byte) | ||
| 20 | |||
| 21 | buf := *bufPtr | ||
| 22 | |||
| 23 | |||
| 24 | if size > cap(buf) { | ||
| 25 | buf = make([]byte, size) | ||
| 26 | } | ||
| 27 | |||
| 28 | return buf[:size] | ||
| 29 | } | ||
| 30 | |||
| 31 | |||
| 32 | func PutBuffer(buf []byte) { | ||
| 33 | if cap(buf) < MaxBufferSize{ | ||
| 34 | // reset | ||
| 35 | buf = buf[:0] | ||
| 36 | bytesPool.Put(&buf) | ||
| 37 | } | ||
| 38 | } | ||
