Sobes.tech
Junior — Middle

Ar įmanoma vienu metu įrašyti duomenis į kanalą be buferio?

sobes.tech AI

Atsakymas iš AI

Go kalboje kanalai gali būti su buferiu arba be jo. Be buferio kanale rašymas (siuntimas) blokuojasi, kol kita gorutina neperskaitys vertės iš kanalo.

Vienu metu rašyti į be buferio kanalą neįmanoma, nes siuntimas blokuojasi iki priėmimo, ir tik vienas siuntėjas gali perduoti duomenis vienu metu.

Jei reikia atlikti vienu metu rašymą be blokavimo, naudojami su buferiu kanalai, kur siuntėjas gali įdėti duomenis į buferį, nesulaukdamas iš karto priėmimo.

Be buferio kanalo pavyzdys:

ch := make(chan int) // be buferio kanalas

// Siuntimas blokuojasi, kol kas nors neskaitys
ch <- 1

Vienu metu rašyti be blokavimo reikia buferio:

ch := make(chan int, 2) // 2 elementų buferis
ch <- 1 // neblokuoja
ch <- 2 // neblokuoja

Apibendrinant: be buferio, vienu metu rašyti neįmanoma.