Sobes.tech
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.