Slice Chunking in Go : une approche optimisée
Pour un traitement efficace de grosses tranches, les diviser en tranches plus petites et plus faciles à gérer peut s'avérer utile. Dans Go, obtenir une segmentation de tranche équilibrée nécessite une approche légèrement différente de celle que vous avez tentée.
Dans votre code, vous calculez correctement la taille du morceau à l'aide de NumCPU et de la longueur de la tranche. Cependant, au lieu de créer de nouvelles tranches, vous pouvez simplement ajouter des tranches de journaux à la tranche divisée. Cette optimisation garantit que la mémoire n'est pas gaspillée lors de copies de données inutiles et réduit l'empreinte mémoire globale.
Voici une démonstration révisée :
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) }
Cette approche optimisée calcule dynamiquement la taille du bloc en fonction de le nombre de processeurs et la longueur de la tranche. Il parcourt la tranche de journaux, en ajoutant des tranches de journaux à la tranche divisée selon les besoins. En évitant la création de tranches inutiles, cette solution améliore considérablement les performances et l'utilisation de la mémoire.
L'exemple de code fourni peut être testé à l'aide du terrain de jeu Go : http://play.golang.org/p/vyihJZlDVy
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!