Sobes.tech
Junior — Middle

¿Cómo funciona el mecanismo de grabación en un canal con acceso restringido y qué sucede en ese proceso?

sobes.tech AI

Respuesta de la IA

En Go, un canal con capacidad limitada (canal con búfer) tiene un tamaño de búfer fijo. Cuando se escriben datos en el canal mediante la operación chan <- value, sucede lo siguiente:

  • Si hay espacio libre en el búfer del canal, el valor se coloca en el búfer y la operación de escritura termina inmediatamente.
  • Si el búfer está lleno, la operación de escritura se bloquea hasta que alguien lea un valor del canal, liberando espacio.

De esta manera, un canal con búfer limitado proporciona sincronización entre goroutines: la escritura se bloquea cuando se desborda, y la lectura cuando el búfer está vacío.

Ejemplo:

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

ch <- 1 // escribimos, búfer: [1]
ch <- 2 // escribimos, búfer: [1, 2]
// ch <- 3 // se bloquea, ya que el búfer está lleno

fmt.Println(<-ch) // leemos 1, búfer: [2]
ch <- 3 // ahora la escritura será exitosa

Por lo tanto, el mecanismo de escritura en un canal con capacidad limitada garantiza el control sobre los flujos de datos y previene el desbordamiento del búfer.