Sobes.tech
Junior — Middle

Какво се случва с горутината, когато блокира при изпълнение на някакъв процес или операция?

sobes.tech AI

Отговор от AI

Когато горутин в Go се блокира на операция (например, четене от канал, изчакване на синхронизация, вход-изход), тя се спира, а планировчикът на Go освобождава системния поток за изпълнение на други горутини. Това позволява ефективно използване на системните ресурси и мащабиране на паралелизма.

Тоест, блокиращата операция не блокира цялата нишка на ОС, а само конкретната горутина. Планировчикът превключва към други горутини, които са готови за изпълнение.

Пример:

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

В този пример, горутината се блокира при четене от канала, но планировчикът позволява на други горутини да работят, докато тя чака.