Documentation
¶
Overview ¶
Package bytebufferpool implements a pool of byte buffers with anti-fragmentation protection.
The pool may waste limited amount of memory due to fragmentation. This amount equals to the maximum total size of the byte buffers in concurrent use.
Index ¶
- func BuffStats() map[string]interface{}
- func CleanupIdleCachedBytesBuffer()
- func DumpBufferItemSize() map[string]interface{}
- func Put(tag string, b *ByteBuffer)
- func PutWithoutReset(tag string, b *ByteBuffer)
- func SetMaxBufferCount(tag string, size uint32)
- func SetMaxBufferSize(tag string, size uint32)
- type ByteBuffer
- func (b *ByteBuffer) Bytes() []byte
- func (b *ByteBuffer) Cap() int
- func (b *ByteBuffer) GrowTo(n int)
- func (b *ByteBuffer) Len() int
- func (b *ByteBuffer) ReadFrom(r io.Reader) (int64, error)
- func (b *ByteBuffer) Reset()
- func (b *ByteBuffer) Set(p []byte)
- func (b *ByteBuffer) SetString(s string)
- func (b *ByteBuffer) String() string
- func (b *ByteBuffer) Write(p []byte) (int, error)
- func (b *ByteBuffer) WriteByte(c byte) error
- func (b *ByteBuffer) WriteBytesArray(ps ...[]byte) (count int, err error)
- func (b *ByteBuffer) WriteString(s string) (int, error)
- func (b *ByteBuffer) WriteTo(w io.Writer) (int64, error)
- type ItemMap
- type ObjectPool
- type Pool
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CleanupIdleCachedBytesBuffer ¶
func CleanupIdleCachedBytesBuffer()
func DumpBufferItemSize ¶
func DumpBufferItemSize() map[string]interface{}
func Put ¶
func Put(tag string, b *ByteBuffer)
Put returns byte buffer to the pool.
ByteBuffer.B mustn't be touched after returning it to the pool. Otherwise data races will occur.
func PutWithoutReset ¶
func PutWithoutReset(tag string, b *ByteBuffer)
func SetMaxBufferCount ¶
func SetMaxBufferSize ¶
Types ¶
type ByteBuffer ¶
type ByteBuffer struct { LastAccess time.Time Used uint32 ID uint32 // B is a byte buffer to use in append-like workloads. // See example code for details. B []byte // contains filtered or unexported fields }
ByteBuffer provides byte buffer, which can be used for minimizing memory allocations.
ByteBuffer may be used with functions appending data to the given []byte slice. See example code for details.
Use Get for obtaining an empty byte buffer.
Example ¶
package main import ( "fmt" "github.com/rubyniu105/framework/lib/bytebufferpool" ) func main() { bb := bytebufferpool.Get("test") bb.WriteString("first line\n") bb.Write([]byte("second line\n")) bb.B = append(bb.B, "third line\n"...) fmt.Printf("bytebuffer contents=%q", bb.B) // It is safe to release byte buffer now, since it is // no longer used. bytebufferpool.Put("test", bb) }
Output:
func Get ¶
func Get(tag string) *ByteBuffer
Get returns an empty byte buffer from the pool.
Got byte buffer may be returned to the pool via Put call. This reduces the number of memory allocations required for byte buffer management.
func (*ByteBuffer) Bytes ¶
func (b *ByteBuffer) Bytes() []byte
Bytes returns b.B, i.e. all the bytes accumulated in the buffer.
The purpose of this function is bytes.Buffer compatibility.
func (*ByteBuffer) Cap ¶
func (b *ByteBuffer) Cap() int
func (*ByteBuffer) GrowTo ¶
func (b *ByteBuffer) GrowTo(n int)
func (*ByteBuffer) ReadFrom ¶
func (b *ByteBuffer) ReadFrom(r io.Reader) (int64, error)
ReadFrom implements io.ReaderFrom.
The function appends all the data read from r to b.
func (*ByteBuffer) SetString ¶
func (b *ByteBuffer) SetString(s string)
SetString sets ByteBuffer.B to s.
func (*ByteBuffer) String ¶
func (b *ByteBuffer) String() string
String returns string representation of ByteBuffer.B.
func (*ByteBuffer) Write ¶
func (b *ByteBuffer) Write(p []byte) (int, error)
Write implements io.Writer - it appends p to ByteBuffer.B
func (*ByteBuffer) WriteByte ¶
func (b *ByteBuffer) WriteByte(c byte) error
WriteByte appends the byte c to the buffer.
The purpose of this function is bytes.Buffer compatibility.
The function always returns nil.
func (*ByteBuffer) WriteBytesArray ¶
func (b *ByteBuffer) WriteBytesArray(ps ...[]byte) (count int, err error)
func (*ByteBuffer) WriteString ¶
func (b *ByteBuffer) WriteString(s string) (int, error)
WriteString appends s to ByteBuffer.B.
type ItemMap ¶
func NewItemMap ¶
func NewItemMap() *ItemMap
func (*ItemMap) Store ¶
func (this *ItemMap) Store(id uint32, buffer *ByteBuffer)
type ObjectPool ¶
type ObjectPool struct { New func() interface{} // contains filtered or unexported fields }
func NewObjectPool ¶
func NewObjectPool(tag string, allocateFunc func() interface{}, returnCallback func() interface{}, maxItems, maxBytes int) *ObjectPool
func (*ObjectPool) Get ¶
func (p *ObjectPool) Get() interface{}
func (*ObjectPool) Put ¶
func (p *ObjectPool) Put(o interface{})
type Pool ¶
type Pool struct { Tag string // contains filtered or unexported fields }
Pool represents byte buffer pool.
Distinct pools may be used for distinct types of byte buffers. Properly determined byte buffer types with their own pools may help reducing memory waste.
func NewTaggedPool ¶
func (*Pool) Drop ¶
func (p *Pool) Drop(b *ByteBuffer)
func (*Pool) Get ¶
func (p *Pool) Get() *ByteBuffer
Get returns new byte buffer with zero length.
The byte buffer may be returned to the pool via Put after the use in order to minimize GC overhead.
func (*Pool) Put ¶
func (p *Pool) Put(b *ByteBuffer)