Para importar o BPOOL do uso do código -fonte Go Get Command.
vá obter -u github.com/unit-io/bpool
Use o pool de buffer para escrever solicitações recebidas para buffer, como operações de put ou lote ou usar o pool de buffer ao escrever dados para registrar o arquivo (durante a operação de confirmação). O objetivo de criar biblioteca bufferpool com capacidade é executar gravações iniciais para buffer sem retomada até que o pool de buffer atinja o tamanho do alvo. O buffer pool não descarta nenhuma solicitação de get ou gravação, mas adiciona atraso gradual a ele para limitar o uso de memória que pode ser usado para outras operações como a redação para registrar ou operações de sincronização de banco de dados.
A documentação detalhada da API está disponível usando o serviço Godoc.org.
Utilize o cliente importando -o no seu código -fonte do cliente Go. Por exemplo,
importar "github.com/unit-io/bpool"
Seguir o snippet de código se executado sem capacidade do buffer consumirá toda a memória do sistema e causará um 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
}
}
O snippet de código para usar o bufferpool com capacidade limitará o uso da memória do sistema, adicionando atraso gradual às solicitações e não 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 o Método BPOOL.NewBufferpool () e passe o parâmetro buffersize para criar um novo pool de buffer.
const (
BufferSize = 1<<30 // (1GB size)
)
pool := bpool.NewBufferPool(BufferSize, nil)
Para obter o buffer do buffer pool, use bufferpool.get (). Quando o buffer pool atinge sua capacidade, obtenha o método é executado com atraso gradual para limitar o uso da memória do sistema.
....
var buffer *bpool.Buffer
buffer = pool.Get()
Para gravar no buffer, use buffer.write () método.
var scratch [8]byte
binary.LittleEndian.PutUint64(scratch[0:8], uint64(buffer.Size()))
b.buffer.Write(scratch[:])
....
Para ler o buffer, use o método buffer.bytes (). Esta operação retorna a fatia de dados sublinhada armazenada no buffer.
data := buffer.Bytes()
...
Para colocar o buffer na piscina quando terminar de usar o buffer, use o método bufferpool.put (), esta operação redefine a fatia sublinhada. Ele também redefine o intervalo do pool de buffer que foi usado para adiar a operação GET se a capacidade estiver abaixo do tamanho do alvo.
pool.Put(buffer)
...
Para redefinir a fatia sublinhada armazenada no buffer e continuar usando o buffer buffer.reset () método em vez de usar operação bufferpool.put ().
buffer.Reset()
....
Se você quiser contribuir, bifurque o repositório e use uma filial de recursos. Solicitações de tração são bem -vindas.
Este projeto está licenciado sob licença do MIT.