Junior — Middle
Kādās situācijās tiek veikta bloķēšana, strādājot ar standarta datu pārraides kanālu?
sobes.tech AI
Atbilde no AI
Go standarta datu pārraides kanāls bloķējas šādos gadījumos:
- Sūtot vērtību uz kanāla (
chan <- value), ja kanālam nav bufera vai buferis ir pilns, sūtošā gorutīna bloķējas līdz brīdim, kad cita plūsma nolasīs vērtību. - Lasot no kanāla (
value := <- chan), ja kanāls ir tukšs, lasošā gorutīna bloķējas līdz brīdim, kad parādīsies dati.
Tādējādi bloķēšanās notiek, mēģinot sūtīt datus pilnā kanālā vai lasīt no tukša kanāla, nodrošinot sinhronizāciju starp gorutīnām.
Piemērs:
ch := make(chan int) // bez bufera kanāls
// Sūtīšana bloķējas, līdz kāds nolasīs
go func() {
ch <- 42
}()
vērtība := <-ch // lasīšana atbrīvo sūtīšanu
fmt.Println(vērtība)