Le modèle de pipeline est un moyen puissant de traiter les données à travers les étapes de manière simultanée. Chaque étape effectue une opération différente sur les données puis passe à l'étape suivante.
En utilisant des canaux pour transmettre les données, le modèle de pipeline peut améliorer les performances dans de nombreux cas.
L'idée est vraiment très simple, chaque étape parcourt un canal, extrayant des données jusqu'à ce qu'il n'en reste plus. Pour chaque élément de données, l'étape effectue son opération puis transmet le résultat à un canal de sortie et ferme enfin le canal lorsqu'il ne reste plus de données dans le canal d'entrée. La fermeture du canal est importante pour que l'étape en aval sache quand se terminer
Créez une séquence de nombres, doublez-les, puis filtrez les valeurs faibles et enfin imprimez-les sur la console.
func produce(num int) chan int { out := make(chan int) go func() { for i := 0; i < num; i++ { out <- rand.Intn(100) } close(out) }() return out } func double(input <-chan int) chan int { out := make(chan int) go func() { for value := range input { out <- value * 2 } close(out) }() return out } func filterBelow10(input <-chan int) chan int { out := make(chan int) go func() { for value := range input { if value > 10 { out <- value } } close(out) }() return out } func print(input <-chan int) { for value := range input { fmt.Printf("value is %d\n", value) } } func main() { print(filterBelow10(double(produce(10)))) }
Il existe évidemment une manière plus lisible de structurer main() :
func main() { input := produce(10) doubled := double(input) filtered := filterBelow10(doubled) print(filtered) }
Choisissez votre style en fonction de vos propres préférences.
Qu'ajouteriez-vous ici ? Laissez vos commentaires ci-dessous.
Merci !
Le code de cet article et de tous les articles de cette série peut être trouvé ici
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!