Sobes.tech
Junior — Middle

Ce se întâmplă cu o goroutine atunci când se blochează în timpul executării unui proces sau operațiuni?

sobes.tech AI

Răspuns de la AI

Când o gorutină în Go se blochează pe o operație (de exemplu, citirea dintr-un canal, așteptarea sincronizării, intrare/ieșire), ea este suspendată, iar planificatorul Go eliberează firul de sistem pentru a executa alte goroutines. Acest lucru permite utilizarea eficientă a resurselor sistemului și scalarea paralelismului.

Adică, o operație blocantă nu blochează întregul fir de sistem de operare, ci doar goroutine-ul specific. Planificatorul trece la alte goroutines care sunt gata pentru execuție.

Exemplu:

ch := make(chan int)
func() {
    val := <-ch // goroutine-ul se blochează până primește o valoare
    fmt.Println(val)
}()
ch <- 42 // deblochează goroutine-ul

În acest exemplu, goroutine-ul se blochează la citirea din canal, dar planificatorul permite altor goroutines să funcționeze în timp ce ea așteaptă.