Junior — Middle
Co się dzieje z gorutyną, gdy zablokuje się podczas wykonywania jakiegoś procesu lub operacji?
sobes.tech AI
Odpowiedź od AI
Gdy gorutyna w Go blokuje się na operacji (np. odczyt z kanału, oczekiwanie na synchronizację, wejście/wyjście), zostaje zawieszona, a planista Go zwalnia wątek systemowy do wykonywania innych gorutyn. Pozwala to na efektywne wykorzystanie zasobów systemowych i skalowanie równoległości.
Oznacza to, że operacja blokująca nie blokuje całego wątku OS, a tylko konkretną gorutynę. Planista przełącza się na inne gorutyny, które są gotowe do wykonania.
Przykład:
ch := make(chan int)
func() {
val := <-ch // gorutyna blokuje się, dopóki nie otrzyma wartości
fmt.Println(val)
}()
ch <- 42 // odblokowuje gorutynę
W tym przykładzie gorutyna blokuje się na odczycie z kanału, ale planista pozwala innym gorutynom działać, podczas gdy ona czeka.