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.