Junior — Middle
Paaiškinkite, kas yra blokuojantys iškvietimai gorutinų darbo kontekste ir kaip jie veikia programos vykdymą
sobes.tech AI
Atsakymas iš AI
Blokuojantys skambučiai yra operacijos, kurios vykdant sustabdo (blokuoja) esamą gorutiną iki tol, kol ši operacija nebaigiama. Go kalbos gorutinų kontekste, jei gorutina atlieka blokuojantį skambutį, ji nepradės vykdyti tol, kol skambutis nebus baigtas.
Tai daro įtaką programai, nes jei blokuojantis skambutis vykdomas pagrindinėje gorutinoje, ji lauks, kas gali sukelti vėlavimus ar užšalimus. Tačiau, dėka gorutinų lengvumo ir galimybės jų paleisti daug, vienos gorutinos blokuojantys skambučiai neblokuoja kitų gorutinų vykdymo.
Pavyzdys blokuojančio skambučio — skaitymas iš kanalo, kai duomenų nėra:
ch := make(chan int)
func main() {
go func() {
ch <- 42 // reikšmės siuntimas
}()
val := <-ch // blokuojantis skambutis, laukia, kol gaus reikšmę
fmt.Println(val)
}
Čia, kanalo skaitymo operacija blokuoja pagrindinę gorutina, kol neateina reikšmė.