Junior — Middle
Was passiert mit einer Goroutine, wenn sie bei der Ausführung eines Prozesses oder einer Operation blockiert?
sobes.tech KI
Antwort von AI
Wenn eine Goroutine in Go bei einer Operation blockiert (z.B. Lesen aus einem Kanal, Warten auf Synchronisation, Ein- und Ausgabe), wird sie ausgesetzt, und der Scheduler von Go gibt den System-Thread frei, um andere Goroutines auszuführen. Dies ermöglicht eine effiziente Nutzung der Systemressourcen und die Skalierung der Parallelität.
Das heißt, eine blockierende Operation blockiert nicht den gesamten OS-Thread, sondern nur die spezifische Goroutine. Der Scheduler wechselt zu anderen Goroutines, die bereit sind, ausgeführt zu werden.
Beispiel:
ch := make(chan int)
func() {
val := <-ch // Goroutine wird blockiert, bis ein Wert empfangen wird
fmt.Println(val)
}()
ch <- 42 // entsperrt die Goroutine
In diesem Beispiel wird die Goroutine beim Lesen aus dem Kanal blockiert, aber der Scheduler erlaubt anderen Goroutines zu arbeiten, während sie wartet.