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.