Sobes.tech
Junior — Middle

¿En qué se diferencia un canal con búfer de un canal sin búfer en el contexto de la interacción entre goroutines?

sobes.tech AI

Respuesta de la IA

Un canal sin búfer (canal sin buffer) bloquea al remitente hasta que el receptor lea el valor, y viceversa: el receptor se bloquea hasta que aparezca un valor. Esto garantiza la sincronización entre las goroutines.

Un canal con búfer (canal con buffer) tiene un búfer interno de tamaño fijo. El remitente puede enviar varios valores consecutivos sin bloquearse, hasta que el búfer se llene. El receptor puede leer valores del búfer sin esperar al remitente, si el búfer no está vacío.

Ejemplo:

ch := make(chan int)        // sin búfer
chBuf := make(chan int, 2)  // con búfer de 2 elementos

// ch <- 1  // se bloqueará si no hay receptor
chBuf <- 1 // no se bloqueará hasta que el búfer se llene

De esta forma, los canales con búfer permiten gestionar la sincronización de manera más flexible y pueden mejorar el rendimiento, reduciendo la cantidad de bloqueos.