Junior — Middle
Какво се случва с горутината, когато блокира при изпълнение на някакъв процес или операция?
sobes.tech AI
Отговор от AI
Когато горутин в Go се блокира на операция (например, четене от канал, изчакване на синхронизация, вход-изход), тя се спира, а планировчикът на Go освобождава системния поток за изпълнение на други горутини. Това позволява ефективно използване на системните ресурси и мащабиране на паралелизма.
Тоест, блокиращата операция не блокира цялата нишка на ОС, а само конкретната горутина. Планировчикът превключва към други горутини, които са готови за изпълнение.
Пример:
ch := make(chan int)
func() {
val := <-ch // горутината се блокира, докато не получи стойност
fmt.Println(val)
}()
ch <- 42 // отключва горутината
В този пример, горутината се блокира при четене от канала, но планировчикът позволява на други горутини да работят, докато тя чака.