Sobes.tech
Junior — Middle

Când va avea loc blocarea exact atunci când se utilizează un canal cu dimensiunea de 100 de elemente?

sobes.tech AI

Răspuns de la AI

În Go, un canal cu o dimensiune a bufferului de 100 de elemente înseamnă că poți trimite până la 100 de valori fără ca expeditorul să fie blocat.

Blocarea va avea loc în momentul în care bufferul canalului conține deja 100 de elemente și goroutine-ul care trimite încearcă să trimită al 101-lea element. Deoarece bufferul este plin, trimiterea va fi blocată până când cineva va citi cel puțin un element din canal.

Exemplu:

ch := make(chan int, 100)

// Umplem canalul
for i := 0; i < 100; i++ {
    ch <- i // nu se blochează
}

// Următoarea trimitere va fi blocată până când se citește un element
ch <- 101 // se blochează

Astfel, blocarea are loc atunci când se încearcă trimiterea unui element într-un buffer de canal complet plin.