Sobes.tech
Junior — Middle

Za akých podmienok sa vykonáva blokovanie pri práci so štandardným kanálom prenosu dát?

sobes.tech AI

Odpoveď od AI

V Go-ju, standardni kanal za prenos podatkov blokira v naslednjih primerih:

  • Pri pošiljanju vrednosti v kanal (chan <- value), če kanal nima predpomnilnika ali je poln, pošiljajoča gorutina blokira, dokler drug nit ne prebere vrednosti.
  • Pri branju iz kanala (value := <- chan), če je kanal prazen, bralna gorutina blokira, dokler se ne pojavijo podatki.

Tako blokiranje nastopi pri poskusu pošiljanja podatkov v poln kanal ali branja iz praznega kanala, kar zagotavlja sinhronizacijo med gorutinami.

Primer:

ch := make(chan int) // kanal brez predpomnilnika

// Pošiljanje se blokira, dokler nekdo ne prebere
go func() {
    ch <- 42
}()

vrednost := <-ch // branje odblokira pošiljanje
fmt.Println(vrednost)