Чтобы импортировать BPOOL из исходного кода, используйте команду GO GET.
Go Get -u github.com/unit-io/bpool
Используйте пул буферов для написания входящих запросов в буфер, таких как операции PUT или пакетный бассейн или используйте пул буферов во время записи данных для журнала файла (во время операции по коммитию). Целью создания библиотеки буфера с емкостью является выполнение начальных записей в буфере без отборочного перерыва, пока буферный пул не достигнет своего целевого размера. Buffer Pool не отказывается от любых запросов GET или записи, но он добавляет постепенной задержки, чтобы ограничить использование памяти, которое может использовать для других операций, таких как операции журнала или синхронизации DB.
Подробная документация API доступна с использованием службы GoDoc.org.
Используйте клиент, импортируя его в исходном коде клиента GO. Например,
Импорт "github.com/unit-io/bpool"
Следующий фрагмент кода, если он выполнен без буферной емкости, будет потреблять всю системную память и вызовет панику.
buf := bytes.NewBuffer(make([]byte, 0, 2))
defer func() {
if r := recover(); r != nil {
fmt.Println("panics from blast")
}
}()
for {
_, err := buf.Write([]byte("create blast"))
if err != nil {
fmt.Println(err.Error())
return
}
}
Фрагмент кода для использования Bufferpool с емкостью ограничит использование системной памяти путем постепенной задержки в запросы и не вызовет панику.
pool := bpool.NewBufferPool(1<<20, &bpool.Options{MaxElapsedTime: 1 * time.Minute, WriteBackOff: true}) // creates BufferPool of 16MB target size
buf := pool.Get()
defer pool.Put(buf)
for {
_, err := buf.Write([]byte("create blast"))
if err != nil {
fmt.Println(err.Error())
return
}
}
Используйте метод bpool.newbufferpool () и пройти параметр Buffersize для создания нового буферного пула.
const (
BufferSize = 1<<30 // (1GB size)
)
pool := bpool.NewBufferPool(BufferSize, nil)
Чтобы получить буфер от буфера, используйте Bufferpool.get (). Когда буферный пул достигает своей емкости, метод прогона с постепенной задержкой, чтобы ограничить использование памяти системы.
....
var buffer *bpool.Buffer
buffer = pool.Get()
Чтобы написать в буфере, используйте Buffer.Write () Метод.
var scratch [8]byte
binary.LittleEndian.PutUint64(scratch[0:8], uint64(buffer.Size()))
b.buffer.Write(scratch[:])
....
Для чтения буфера Использовать метод Buffer.bytes (). Эта операция возвращает подчеркивание среза данных, хранящегося в буфере.
data := buffer.Bytes()
...
Чтобы положить буфер в бассейн, когда закончено с помощью Buffer Использовать метод Bufferpool.put (), эта операция сбрасывает подчеркивающий срез. Он также сбрасывает интервал пула буферов, который использовался для задержки операции получения, если емкость ниже целевого размера.
pool.Put(buffer)
...
Чтобы сбросить подключенный срез, хранящийся в буфере, и продолжить использование метода буфера. Использование Buffer.reset () вместо использования работы Bufferpool.put ().
buffer.Reset()
....
Если вы хотите внести свой вклад, пожалуйста, разделите хранилище и используйте филиал. Приглашаются запросы.
Этот проект лицензирован по лицензии MIT.