Junior
Koja je razlika između buferisanih i nebuferisanih kanala u Go?
sobes.tech АИ
Одговор од АИ
Kanali bez buffera zahtevaju da se slanje i primanje podataka dogodi sinhrono. Pošiljalac se blokira dok primalac ne bude spreman da prihvati podatke, i obrnuto. Njihova veličina buffera je nula.
Bufferisani kanali imaju konačnu veličinu buffera. Pošiljalac se blokira samo ako je buffer pun, a primalac ako je buffer prazan.
// Kanal bez buffera
unbufferedChan := make(chan int)
// Bufferisani kanal sa veličinom buffera od 5
bufferedChan := make(chan int, 5)
| Karakteristika | Kanal bez buffera | Bufferisani kanal |
|---|---|---|
| Veličina buffera | 0 | > 0 |
| Sinhronost | Sinhrona interakcija | Asinhrona ako buffer nije pun/prazan |
| Blokiranje pošiljaoca | Do primanja od strane primaoca | Do punjenja buffera |
| Blokiranje primaoca | Do slanja od strane pošiljaoca | Do pražnjenja buffera |
Kanali bez buffera se koriste za sinhronizaciju gorutina i obezbeđuju da poruke ne budu izgubljene. Bufferisani kanali se koriste za smanjenje blokada, omogućavajući pošiljaocu da nastavi sa radom dok primalac još nije spreman, ili obrnuto.