So importieren Sie BPool aus Quellcode. Verwenden Sie den Befehl GE GET.
Gehen Sie -u github.com/unit-io/bpool
Verwenden Sie den Bufferpool, um eingehende Anfragen zum Puffer wie Put- oder Stapelvorgänge zu schreiben, oder verwenden Sie Bufferpool, während Sie Daten zum Protokolldatei schreiben (während des Ausschusses). Das Ziel, die Bufferpool -Bibliothek mit Kapazität zu erstellen, ist es, erste Schreibvorgänge in Puffer ohne Backoff durchzuführen, bis der Pufferpool seine Zielgröße erreicht. Der Pufferpool verweigert keine Anfragen von GET- oder Schreiben, aber er fügt ihm eine allmähliche Verzögerung hinzu, um die Speicherverwendung zu begrenzen, die für andere Vorgänge wie Schreiben in Protokoll- oder DB -Synchronisierungsvorgänge verwendet werden kann.
Eine detaillierte API -Dokumentation ist mit dem Dienst von Godoc.org verfügbar.
Nutzen Sie den Client, indem Sie ihn in Ihren Go -Client -Quellcode importieren. Zum Beispiel,
Importieren "github.com/unit-io/bpool"
Das folgende Code -Snippet, wenn er ohne Pufferkapazität ausgeführt wird, konsumiert den gesamten Systemspeicher und verursacht eine Panik.
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
}
}
Code -Snippet zur Verwendung von Bufferpool mit Kapazität begrenzt die Verwendung des Systemspeichers, indem die Anforderungen allmählich verzögert werden und keine Panik verursacht.
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 bpool.NewBufferPool() method and pass BufferSize parameter to create new buffer pool.
const (
BufferSize = 1<<30 // (1GB size)
)
pool := bpool.NewBufferPool(BufferSize, nil)
To get buffer from buffer pool use BufferPool.Get(). When buffer pool reaches its capacity Get method runs with gradual delay to limit system memory usage.
....
var buffer *bpool.Buffer
buffer = pool.Get()
To write to buffer use Buffer.Write() method.
var scratch [8]byte
binary.LittleEndian.PutUint64(scratch[0:8], uint64(buffer.Size()))
b.buffer.Write(scratch[:])
....
Zum Lesen von Puffer verwenden Sie Buffer.ByTes () -Methode. Diese Operation gibt Unterstreichung von Data Slice zurück, die in Puffer gespeichert sind.
data := buffer.Bytes()
...
Um Puffer in den Pool zu setzen, wenn sie mit der Methode der Bufferpool.put () -Methode von Puffer verwendet werden, setzt dieser Vorgang die Unterstreichung der Unterstreichung zurück. Es setzt auch das Pufferpool -Intervall zurück, das verwendet wurde, um den GET -Betrieb zu verzögern, wenn die Kapazität unter der Zielgröße liegt.
pool.Put(buffer)
...
Um die auf dem Puffer gespeicherte Unterstreichung des Puffers zurückzusetzen, und die Methode des Puffer -Puffers verwenden.
buffer.Reset()
....
Wenn Sie einen Beitrag leisten möchten, geben Sie bitte das Repository aus und verwenden Sie eine Feature -Filiale. Pull -Anfragen sind willkommen.
Dieses Projekt ist unter MIT -Lizenz lizenziert.