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
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.