Das Pipeline-Muster ist eine leistungsstarke Möglichkeit, Daten stufenweise gleichzeitig zu verarbeiten. Jede Stufe führt eine andere Operation an den Daten durch und geht dann zur nächsten Stufe über.
Durch die Verwendung von Kanälen zur Weitergabe der Daten kann das Pipeline-Muster in vielen Fällen die Leistung verbessern.
Die Idee ist wirklich sehr einfach: Jede Stufe iteriert über einen Kanal und ruft Daten ab, bis keine mehr übrig sind. Für jedes Datenelement führt die Stufe ihre Operation durch, übergibt dann das Ergebnis an einen Ausgabekanal und schließt schließlich den Kanal, wenn keine Daten mehr im Eingabekanal übrig sind. Das Schließen des Kanals ist wichtig, damit die Downstream-Stufe weiß, wann sie beenden muss
Erstellen Sie eine Zahlenfolge, verdoppeln Sie sie, filtern Sie dann niedrige Werte und geben Sie sie schließlich auf der Konsole aus.
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)))) }
Es gibt offensichtlich eine besser lesbare Möglichkeit, main():
zu strukturieren
func main() { input := produce(10) doubled := double(input) filtered := filterBelow10(doubled) print(filtered) }
Wählen Sie Ihren Stil nach Ihren eigenen Vorlieben.
Was würden Sie hier hinzufügen? Hinterlassen Sie unten Ihre Kommentare.
Danke!
Den Code für diesen Beitrag und alle Beiträge dieser Reihe finden Sie hier
Das obige ist der detaillierte Inhalt vonDas Pipeline-Muster in Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!