Sobes.tech
Junior — Middle

Je možné provést současný zápis dat do kanálu bez použití vyrovnávací paměti?

sobes.tech AI

Odpověď od AI

V jazyce Go mohou být kanály s buffery a bez buffera. U kanálu bez buffera se zápis (odeslání) zablokuje, dokud jiná gorutina nepřečte hodnotu z kanálu.

Současný zápis do kanálu bez buffera není možný, protože odeslání se zablokuje do doby, než přijme, a pouze jeden odesílatel může současně předat data.

Pokud je potřeba provést současný zápis bez blokování, používají se kanály s buffery, kde odesílatel může vložit data do bufferu, aniž by čekal na okamžité přijetí.

Příklad kanálu bez buffera:

ch := make(chan int) // kanál bez buffera

// Odeslání se zablokuje, dokud někdo nečte
ch <- 1

Pro současný zápis bez blokování je potřeba buffer:

ch := make(chan int, 2) // buffer na 2 prvky
ch <- 1 // nezablokuje se
ch <- 2 // nezablokuje se

Shrnutí: bez buffera není možné současné zápisy provádět.