Junior — Middle
Kada tiksliai įvyks blokavimas naudojant kanalą su 100 elementų?
sobes.tech AI
Atsakymas iš AI
Go kalboje kanalas su 100 elementų dydžio buferiu reiškia, kad jį galima siųsti iki 100 reikšmių be siuntėjo blokavimo.
Blokavimas įvyksta tada, kai kanalo buferis jau turi 100 elementų, ir siuntimo gorutina bando siųsti 101-ąjį elementą. Kadangi buferis pilnas, siuntimas bus blokuojamas, kol kas nors neskaitė bent vieno elemento iš kanalo.
Pavyzdys:
ch := make(chan int, 100)
// Užpildome kanalą
for i := 0; i < 100; i++ {
ch <- i // neblokuojama
}
// Kitas siuntimas bus blokuojamas, kol nebus perskaitytas vienas elementas
ch <- 101 // blokuojama
Taigi, blokavimas įvyksta bandant siųsti elementą į visiškai užpildytą kanalo buferį.