Sobes.tech
Junior — Middle

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:

  1. 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.

  2. 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.

  3. 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.