Sobes.tech
Назад к вопросам
Junior — Middle
87

Каким образом осуществляется перевод горутины в состояние блокировки в Go?

Компании, где спрашивали
IDT

Ответ от нейросети

sobes.tech AI

В Go горутина переходит в состояние блокировки (blocked), когда она ожидает какого-либо события, например, ввода-вывода, получения значения из канала, освобождения мьютекса или таймера. В этот момент планировщик Go (scheduler) приостанавливает выполнение этой горутины и переключается на другие готовые к выполнению горутины.

Например, если горутина пытается прочитать из канала, но в канале нет данных, она блокируется до тех пор, пока другой поток не запишет туда данные:

ch := make(chan int)
go func() {
    val := <-ch // блокируется, пока не придёт значение
    fmt.Println(val)
}()
ch <- 42 // разблокирует горутину

Таким образом, блокировка горутины — это механизм кооперативного планирования, позволяющий эффективно использовать системные ресурсы без активного ожидания (busy waiting).