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