Slice Chunking in Go: Ein optimierter Ansatz
Für die effiziente Verarbeitung großer Scheiben kann es wertvoll sein, sie in kleinere, handliche Scheiben zu zerteilen. Um in Go eine ausgewogene Slice-Chunking-Aufteilung zu erreichen, ist ein etwas anderer Ansatz erforderlich als der, den Sie versucht haben.
In Ihrem Code berechnen Sie die Chunk-Größe mithilfe von NumCPU und der Slice-Länge korrekt. Anstatt jedoch neue Slices zu erstellen, können Sie einfach Log-Slices an das geteilte Slice anhängen. Diese Optimierung stellt sicher, dass kein Speicher durch unnötiges Kopieren von Daten verschwendet wird, und reduziert den gesamten Speicherbedarf.
Hier ist eine überarbeitete Demonstration:
import "fmt" var logs = make([]string, 2100000) // Simulate a slice with 2.1 million strings func main() { numCPU := runtime.NumCPU() chunkSize := (len(logs) + numCPU - 1) / numCPU var divided [][]string for i := 0; i < len(logs); i += chunkSize { end := i + chunkSize if end > len(logs) { end = len(logs) } divided = append(divided, logs[i:end]) } fmt.Printf("%#v\n", divided) }
Dieser optimierte Ansatz berechnet die Blockgröße dynamisch basierend auf die Anzahl der CPUs und die Slice-Länge. Es iteriert über das Protokollsegment und hängt nach Bedarf Protokollsegmente an das geteilte Segment an. Durch die Vermeidung unnötiger Slice-Erstellung verbessert diese Lösung die Leistung und Speichernutzung erheblich.
Das bereitgestellte Codebeispiel kann mit dem Go-Playground getestet werden: http://play.golang.org/p/vyihJZlDVy
Das obige ist der detaillierte Inhalt vonWie kann ich das Slice-Chunking in Go für eine effiziente Verarbeitung großer Datenmengen optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!