Heim >Backend-Entwicklung >Golang >Wie kann ich ein großes Go-Slice mit Millionen von Strings für die parallele Verarbeitung effizient aufteilen?
Bei der Arbeit mit großen Datensätzen in Go kann es eine häufige Aufgabe sein, zu bestimmen, wie ein großes Slice gleichmäßig in kleinere Stücke verteilt werden kann. In diesem Artikel wird eine Lösung für die Aufteilung eines Slice mit über 2 Millionen Strings untersucht, um eine gleichmäßige Verteilung sicherzustellen.
Der ursprüngliche Ansatz bestand darin, die Start- und Endindizes jedes Blocks zu bestimmen und den angegebenen Bereich in einen neuen Slice zu kopieren. Diese Lösung führte jedoch dazu, dass der erste Block mehrmals kopiert wurde, was ihn unwirksam machte.
Um dieses Problem zu beheben, ist es effizienter, die Erstellung neuer Slices zu vermeiden. Hängen Sie stattdessen den relevanten Protokollabschnitt direkt an den geteilten Abschnitt an. Dieser Ansatz gewährleistet eine gleichmäßige Verteilung ohne unnötige Duplizierung.
chunkSize := (len(logs) + numCPU - 1) / numCPU for i := 0; i < len(logs); i += chunkSize { end := i + chunkSize if end > len(logs) { end = len(logs) } divided = append(divided, logs[i:end]) }
Diese aktualisierte Lösung teilt den Slice effizient in gleichmäßig verteilte kleinere Slices auf und bietet so Platz für die Gesamtzahl der Strings und CPU-Kerne für optimale Leistung.
Das obige ist der detaillierte Inhalt vonWie kann ich ein großes Go-Slice mit Millionen von Strings für die parallele Verarbeitung effizient aufteilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!