Sobes.tech
Junior — Middle

Quando exatamente ocorrerá o bloqueio ao usar um canal com tamanho de 100 elementos?

sobes.tech IA

Resposta da IA

No Go, um canal com um tamanho de buffer de 100 elementos significa que pode enviar até 100 valores sem bloquear o remetente.

O bloqueio ocorrerá no momento em que o buffer do canal já contiver 100 elementos, e a goroutine que envia tentar enviar o 101º elemento. Como o buffer está cheio, o envio será bloqueado até que alguém leia pelo menos um elemento do canal.

Exemplo:

ch := make(chan int, 100)

// Preenche o canal
for i := 0; i < 100; i++ {
    ch <- i // não bloqueia
}

// A próxima tentativa de envio será bloqueada até que um elemento seja lido
ch <- 101 // bloqueia

Assim, o bloqueio ocorre ao tentar enviar um elemento para um buffer de canal completamente cheio.