Back to questions
Junior — Middle
88
Каким образом осуществляется перевод горутины в состояние блокировки в Go?
Companies where asked
IDT
Answer from AI
sobes.tech AI
В Go горутина переходит в состояние блокировки (blocked), когда она ожидает какого-либо события, например, ввода-вывода, получения значения из канала, освобождения мьютекса или таймера. В этот момент планировщик Go (scheduler) приостанавливает выполнение этой горутины и переключается на другие готовые к выполнению горутины.
Например, если горутина пытается прочитать из канала, но в канале нет данных, она блокируется до тех пор, пока другой поток не запишет туда данные:
ch := make(chan int)
go func() {
val := <-ch // блокируется, пока не придёт значение
fmt.Println(val)
}()
ch <- 42 // разблокирует горутину
Таким образом, блокировка горутины — это механизм кооперативного планирования, позволяющий эффективно использовать системные ресурсы без активного ожидания (busy waiting).