capypad
0 Tage Serie
go / expert
Snippet

Reduzierung des GC-Drucks mit sync.Pool

sync.Pool ermöglicht die Wiederverwendung von Objekten, was die Häufigkeit von Garbage-Collection-Zyklen in Anwendungen mit hohem Durchsatz durch Recycling von zugewiesenem Speicher erheblich reduziert.

snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
var bufferPool = sync.Pool{
New: func() any { return new(bytes.Buffer) },
}
 
func Process(data []byte) {
buf := bufferPool.Get().(*bytes.Buffer)
defer func() {
buf.Reset()
bufferPool.Put(buf)
}()
buf.Write(data)
}
Erklärung
1
New: func() any { return new(bytes.Buffer) }
Definiert, wie ein neues Objekt erstellt wird, wenn der Pool leer ist.
2
bufferPool.Put(buf)
Gibt den Puffer an den Pool zurück, nachdem sein Zustand für die zukünftige Verwendung gelöscht wurde.