Sobes.tech
Junior — Middle

Explicați ce sunt apelurile blocante în contextul lucrului cu goroutines și cum acestea afectează execuția programului

sobes.tech AI

Răspuns de la AI

Apelurile blocante sunt operații care, atunci când sunt executate, opresc (blochează) goroutine-ul curent până când această operație se finalizează. În contextul goroutine-urilor în Go, dacă o goroutine efectuează o apel blocant, ea nu va continua execuția până când apelul nu se încheie.

Aceasta influențează programul astfel încât, dacă apelul blocant este efectuat în goroutine-ul principal, acesta va aștepta, ceea ce poate duce la întârzieri sau blocări. Cu toate acestea, datorită faptului că goroutine-urile sunt ușoare și pot fi lansate multe, apelurile blocante într-o goroutine nu blochează execuția altor goroutine-uri.

Un exemplu de apel blocant este citirea dintr-un canal fără date disponibile:

ch := make(chan int)

func main() {
    go func() {
        ch <- 42 // trimiterea valorii
    }()
    val := <-ch // apel blocant, așteaptă să primească valoarea
    fmt.Println(val)
}

Aici, operația de citire din canal blochează goroutine-ul main până când ajunge o valoare.