Junior — Middle
Da li je moguće izvršiti istovremeni zapis podataka u kanal bez korišćenja bafera?
sobes.tech АИ
Одговор од АИ
U Go, kanali mogu biti sa ili bez buffera. Kod kanala bez buffera, pisanje (slanje) se blokira dok druga gorutina ne pročita vrednost iz kanala.
Istovremeno pisanje u kanal bez buffera nije moguće, jer se slanje blokira do primanja, i samo jedan pošiljalac može preneti podatke u jednom trenutku.
Ako je potrebno izvršiti istovremeno pisanje bez blokiranja, koriste se kanali sa bufferom, gde pošiljalac može staviti podatke u buffer bez čekanja na trenutni prijem.
Primer kanala bez buffera:
ch := make(chan int) // kanal bez buffera
// Slanje se blokira dok neko ne pročita
ch <- 1
Za istovremeno pisanje bez blokiranja, potreban je buffer:
ch := make(chan int, 2) // buffer od 2 elementa
ch <- 1 // ne blokira
ch <- 2 // ne blokira
Ukratko: bez buffera, istovremeno pisanje nije moguće.