Para importar Bpool desde el código fuente, use el comando Go Get.
Ve a buscar -u github.com/unit-io/bpool
Use el grupo de búfer para escribir solicitudes entrantes para búfer, como operaciones de put o lotes o use el grupo de búfer mientras escribe datos para registrar el archivo (durante la operación de confirmación). El objetivo de crear la biblioteca de BufferPool con capacidad es realizar escrituras iniciales para buffer sin retroceso hasta que el grupo de búfer alcance su tamaño objetivo. El grupo de buffer no descarta ninguna solicitud de obtención o escritura, pero le agrega retraso gradual para limitar el uso de memoria que puede usarse para otras operaciones, como la escritura para registrar o las operaciones de sincronización de DB.
La documentación de API detallada está disponible utilizando el servicio GODOC.org.
Utilice el cliente importándolo en su código fuente del cliente GO. Por ejemplo,
importar "github.com/unit-io/bpool"
El siguiente fragmento de código si se ejecuta sin capacidad de búfer consumirá toda la memoria del sistema y causará un pánico.
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
}
}
El fragmento de código para usar BufferPool con capacidad limitará el uso de la memoria del sistema agregando retraso gradual a las solicitudes y no causará pánico.
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
}
}
Use el método bpool.newbufferPool () y pase el parámetro de buffersize para crear un nuevo grupo de búfer.
const (
BufferSize = 1<<30 // (1GB size)
)
pool := bpool.NewBufferPool(BufferSize, nil)
Para obtener el búfer de la piscina de búfer, use BufferPool.get (). Cuando el grupo de búfer alcanza su capacidad, el método get se ejecuta con retraso gradual para limitar el uso de la memoria del sistema.
....
var buffer *bpool.Buffer
buffer = pool.Get()
Para escribir en Buffer Use Buffer.Write () Método.
var scratch [8]byte
binary.LittleEndian.PutUint64(scratch[0:8], uint64(buffer.Size()))
b.buffer.Write(scratch[:])
....
Para leer el método de uso de buffer.bytes (). Esta operación devuelve subrayar los datos de datos almacenados en búfer.
data := buffer.Bytes()
...
Para colocar el búfer en la piscina cuando termine de usar el buffer, use el método BufferPool.put (), esta operación restablece el porte subrayado. También restablece el intervalo de la piscina de búfer que se utilizó para retrasar la operación GET si la capacidad está por debajo del tamaño objetivo.
pool.Put(buffer)
...
Para restablecer el porte subrayado almacenado al búfer y continúe usando el método de uso de buffer Buffer.reset () en lugar de usar la operación BufferPool.put ().
buffer.Reset()
....
Si desea contribuir, desembolse el repositorio y use una rama de funciones. Las solicitudes de extracción son bienvenidas.
Este proyecto tiene licencia bajo la licencia MIT.