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