Sobes.tech
Junior — Middle

Objasnite šta su blokirajući pozivi u kontekstu rada sa gorutinama i kako oni utiču na izvršenje programa

sobes.tech АИ

Одговор од АИ

Blokirajući pozivi su operacije koje, kada se izvrše, zaustavljaju (blokiraju) trenutnu gorutinu dok se operacija ne završi. U kontekstu gorutina u Go, ako gorutina izvršava blokirajući poziv, neće nastaviti sa izvršavanjem dok poziv ne završi.

Ovo utiče na program tako što, ako se blokirajući poziv izvršava u glavnoj gorutini, ona će čekati, što može dovesti do kašnjenja ili zamrzavanja. Međutim, zahvaljujući tome što su gorutine lake i može ih se pokrenuti mnogo, blokirajući pozivi u jednoj gorutini ne blokiraju izvršavanje drugih gorutina.

Primer blokirajućeg poziva je čitanje iz kanala bez dostupnih podataka:

ch := make(chan int)

func main() {
    go func() {
        ch <- 42 // slanje vrednosti
    }()
    val := <-ch // blokirajući poziv, čeka da primi vrednost
    fmt.Println(val)
}

Ovde operacija čitanja iz kanala blokira glavnu gorutinu dok ne stigne vrednost.