Sobes.tech
Junior — Middle

Qual é a diferença entre um canal com buffer e um canal sem buffer no contexto da interação entre goroutines?

sobes.tech IA

Resposta da IA

Um canal sem buffer (canal não bufferizado) bloqueia o remetente até que o destinatário leia o valor, e vice-versa — o destinatário fica bloqueado até que um valor apareça. Isso garante a sincronização entre as goroutines.

Um canal com buffer (canal bufferizado) possui um buffer interno de tamanho fixo. O remetente pode enviar vários valores consecutivos sem se bloquear, até que o buffer se encha. O destinatário pode ler valores do buffer sem esperar pelo remetente, se o buffer não estiver vazio.

Exemplo:

ch := make(chan int)        // sem buffer
chBuf := make(chan int, 2)  // com buffer de 2 elementos

// ch <- 1  // ficará bloqueado se não houver destinatário
chBuf <- 1 // não ficará bloqueado até que o buffer encha

Assim, canais com buffer permitem gerenciar a sincronização de forma mais flexível e podem aumentar o desempenho, reduzindo o número de bloqueios.