Wie kann man die Ausführungsreihenfolge von Threads organisieren und verwalten?
sobes.tech KI
Antwort von AI
In Go werden zur Organisation und Steuerung der Ausführungsreihenfolge von Goroutines mehrere Hauptmechanismen verwendet:
-
Kanäle (channels) — ermöglichen die Synchronisation von Goroutines, indem sie Daten zwischen ihnen übertragen. Eine Goroutine, die aus einem Kanal liest, wartet, bis eine andere Goroutine Daten sendet, was die Reihenfolge gewährleistet.
-
sync.WaitGroup — wird verwendet, um auf das Ende einer Gruppe von Goroutines zu warten. Es ermöglicht, zu warten, bis alle gestarteten Goroutines abgeschlossen sind.
-
Mutex und andere Primitive aus dem Paket sync — zum Schutz gemeinsamer Ressourcen und zur Vermeidung von Race Conditions.
Beispiel für die Verwendung von Kanälen für eine sequenzielle Ausführung:
package main
import (
"fmt"
)
func worker(id int, done chan bool) {
fmt.Printf("Worker %d gestartet\n", id)
// Arbeit simulieren
done <- true // Signal für Abschluss
}
func main() {
done := make(chan bool)
go worker(1, done)
<-done // Warten auf Abschluss von Worker 1
go worker(2, done)
<-done // Warten auf Abschluss von Worker 2
fmt.Println("Alle Worker beendet")
}
Auf diese Weise kann man mit Kanälen und Synchronisation die Ausführungsreihenfolge von Goroutines steuern.