Sobes.tech
Junior

¿Cuál es la diferencia entre canales bufferizados y no bufferizados en Go?

sobes.tech AI

Respuesta de la IA

Los canales no bufferizados requieren que el envío y la recepción de datos ocurran de manera síncrona. El remitente se bloquea hasta que el receptor esté listo para aceptar los datos, y viceversa. Su tamaño de búfer es cero.

Los canales bufferizados tienen un tamaño de búfer finito. El remitente se bloquea solo si el búfer está lleno, y el receptor si el búfer está vacío.

// Canal no bufferizado
unbufferedChan := make(chan int)

// Canal bufferizado con tamaño de búfer de 5
bufferedChan := make(chan int, 5)
Característica Canal no bufferizado Canal bufferizado
Tamaño del búfer 0 > 0
Sincronización Interacción síncrona Asíncrona si el búfer no está lleno/vacío
Bloqueo del remitente Hasta que el receptor reciba Hasta que se llene el búfer
Bloqueo del receptor Hasta que el remitente envíe Hasta que se vacíe el búfer

Los canales no bufferizados se usan para sincronizar goroutines y asegurar que los mensajes no se pierdan. Los canales bufferizados se usan para reducir bloqueos, permitiendo que el remitente continúe trabajando mientras el receptor aún no está listo, o viceversa.