Junior — Middle
Kā tiek īstenota mijiedarbība caur buferētu kanālu un kā notiek datu pārraide?
sobes.tech AI
Atbilde no AI
Go valodā veido buferētu kanālu, norādot tā izmēru, piemēram: ch := make(chan int, 3). Šāds kanāls var uzglabāt līdz 3 elementiem, neblokējot sūtītāju.
Sūtot datus caur buferētu kanālu:
- Sūtītājs (
chan <- value) ievieto vērtību kanāla buferī. Ja buferis nav pilns, operācija netiek bloķēta. - Ja buferis ir pilns, sūtītājs bloķējas, līdz vieta kļūst brīva.
- Saņēmējs (
value := <- chan) izņem vērtību no bufera. Ja buferis ir tukšs, saņēmējs bloķējas, līdz parādās dati.
Piemērs:
ch := make(chan int, 2)
ch <- 1 // netraucē, buferī ir 1 elements
ch <- 2 // netraucē, buferī ir 2 elementi (pilns buferis)
fmt.Println(<-ch) // izvada 1, atbrīvo vietu buferī
ch <- 3 // tagad var sūtīt, jo ir vieta
Tādējādi, buferētie kanāli ļauj pagaidu uzglabāt datus un samazina bloķēšanu starp gorutīnām.