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