Sobes.tech
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)