Junior — Middle
Kdy přesně dojde k blokaci při použití kanálu s velikostí 100 prvků?
sobes.tech AI
Odpověď od AI
V Go, kanál s velikostí bufferu 100 prvků znamená, že do něj lze odeslat až 100 hodnot bez blokování odesílatele.
Blokování nastane v okamžiku, kdy buffer kanálu již obsahuje 100 prvků a goroutine, která odesílá, se pokusí odeslat 101. prvek. Protože je buffer plný, bude odeslání zablokováno, dokud někdo ne přečte alespoň jeden prvek z kanálu.
Příklad:
ch := make(chan int, 100)
// Vyplníme kanál
for i := 0; i < 100; i++ {
ch <- i // nezablokuje se
}
// Další odeslání se zablokuje, dokud nebude přečten jeden prvek
ch <- 101 // zablokuje se
Tímto způsobem dochází k blokování při pokusu o odeslání prvku do plného bufferu kanálu.