Junior — Middle
Ako funguje mechanizmus nahrávania v kanáli s obmedzeným prístupom a čo sa pri tom deje?
sobes.tech AI
Odpoveď od AI
V jazyku Go má kanál s obmedzenou kapacitou (vyrovnaný kanál) pevne stanovenú veľkosť bufferu. Keď zapisujeme údaje do kanála pomocou operácie chan <- value, stane sa nasledovné:
- Ak je v bufferi kanála voľné miesto, hodnota sa umiestni do bufferu a zápis sa okamžite ukončí.
- Ak je buffer plný, zápis sa zablokuje, kým niekto neprečíta hodnotu z kanála, čím uvoľní miesto.
Týmto spôsobom vyrovnaný kanál s obmedzenou kapacitou zabezpečuje synchronizáciu medzi gorutinami: zápis sa zablokuje pri pretečení, a čítanie pri prázdnom bufferi.
Príklad:
ch := make(chan int, 2) // buffer na 2 prvky
ch <- 1 // zápis, buffer: [1]
ch <- 2 // zápis, buffer: [1, 2]
// ch <- 3 // sa zablokuje, pretože buffer je plný
fmt.Println(<-ch) // prečíta 1, buffer: [2]
ch <- 3 // teraz zápis prebehne úspešne
Týmto mechanizmom zápisu do kanála s obmedzeným prístupom je zabezpečená kontrola nad tokom dát a zabránené pretečeniu bufferu.