luci: go.chromium.org/luci/common/sync/bufferpool Index | Files

package bufferpool

import "go.chromium.org/luci/common/sync/bufferpool"

Package bufferpool implements a pool of bytes.Buffer instances backed by a sync.Pool. The goal of using a buffer pool is that, in exchange for some locking overhead, the user can avoid iteratively reallocating buffers for frequently used purposes.

Ideal usage of bufferpool is with like-purposed buffers in order to encourage the pool to contain buffers sized to that specific purpose. If this is correctly implemented, the buffers in the pool should generally come into existence, grow to the purpose's size need, and then remain there without further allocation.

An overly-broad-purposed pool, on the other hand, will have its buffers grow to max(purpose...) size and consequently contain more large buffers than necessary.

Index

Package Files

buffer_pool.go

type Buffer Uses

type Buffer struct {
    *bytes.Buffer
    // contains filtered or unexported fields
}

Buffer is a bytes.Buffer that is bound to a pool. It should not be used directly, but rather obtained through calling Get on a P instance.

func (*Buffer) Clone Uses

func (b *Buffer) Clone() []byte

Clone clones the contents of the buffer's Bytes, returning an indepdent duplicate []byte.

func (*Buffer) Release Uses

func (b *Buffer) Release()

Release returns this Buffer to its pool.

After calling Release, no accesses may be made to b or its internal data. If its data is to be retained, it must be cloned prior to Release (see Clone).

type P Uses

type P struct {
    // contains filtered or unexported fields
}

P is a pool of buffers. The zero value is an initialized but empty pool.

P must be passed around as reference, not value.

func (*P) Get Uses

func (p *P) Get() *Buffer

Get returns a Buffer. When the caller is finished with the Buffer, they should call Release to return it to its pool.

Package bufferpool imports 2 packages (graph). Updated 2018-10-21. Refresh now. Tools for package owners.