¿Qué es el Buffer y Para Qué Sirve?
¿Qué es el Buffer?
El buffer es un espacio temporal de memoria física el cual se usa para almacenar información mientras se envía de un lado a otro. Los buffers se pueden encontrar en todo tipo de dispositivos electrónicos, desde el nivel de circuitos hasta el nivel de la comunicación entre dispositivos como por ejemplo en el funcionamiento de internet. Los buffers son tan comunes por su función, que es paliar la diferencia de velocidad de transmisión o procesamiento entre dos dispositivos o procesos por eso están por todos lados en un ordenador: en discos duros, procesadores, RAM, impresoras… y su tamaño y características pueden afectar al rendimiento del dispositivo.
Por ejemplo, en Android, aumentar el buffer de registro puede tener un gran impacto en el rendimiento de un smartphone. Tenemos aquí una guía en que te explicamos cómo hacerlo.
Por ejemplo, se podría entender el funcionamiento de un buffer haciendo una analogía con dos tuberías de agua y entre ellas un deposito, que funcionaría como el buffer de este sistema. La tubería A vierte agua al depósito y tiene una capacidad máxima de 20L a la hora, mientras que la tubería B puede vaciar el deposito a un ritmo variable según se necesite con una capacidad máxima de 10L a la hora. Pongamos que en situación normal entran 8L al depósito por la tubería A, de forma que nada más entrar en él puede salir por la tubería B, pasando por el deposito que funcionaría como un buffer un tiempo mínimo. Pero imaginémonos que excepcionalmente entran 12L por la tubería A, ahora parte de esa agua se quedaría en el deposito llenándolo ya que solo podrán salir por la tubería B 10L, esperando a que el flujo de agua baje y puedan salir, pero si pasa demasiado tiempo este se acabará llenando y se desbordará (buffer overflow) y eliminando del sistema el excedente, es decir, parte de los datos nuevos que entren.
Principalmente existen dos tipos de implementación de un buffer, el físico y el de software: en el físico se tiene un módulo de memoria físico dedicado únicamente a la tarea de funcionar como buffer. El implementado por software es mucho más común y aunque el resultado de funcionamiento es el mismo cuenta con la ventaja de poder usar recursos no dedicados en un inicio para un buffer como puede ser la memoria RAM de un ordenador, ya que estos son creados virtualmente por un software y se pueden eliminan cuando ya no sean necesarios liberando recursos.
¿Para qué sirve el buffer?
Un buffer suele utilizarse para transmitir información en sistemas en los cuales la velocidad a la que se obtiene o se manda la información es diferente a la velocidad a la que se procesa, y no deben confundirse con la memoria cache, ya que tienen funciones muy diferentes: los buffers almacenan información sin mantenerla más tiempo del que tarda en mandarse, pero la memoria cache almacena información durante un periodo de tiempo para que diferentes procesos o aplicaciones puedan acceder a ella rápidamente.
Un escenario de uso muy común donde aparece un buffer ocurre cuando se ve un video en internet desde nuestro ordenador: en este caso la velocidad de internet a la que se descarga el video es variable, mientras que la velocidad a la que se ve el video es constante, de forma que se crea un buffer por software en nuestra memoria RAM en el cual se van descargando los próximos segundos del video según lo vamos viendo para que en caso de que se corte la conexión o baje la velocidad de la red de forma momentánea no lo notemos en la reproducción del video. Con las retransmisiones en directo se da una situación parecida, pero en ese caso el buffer suele ser muchísimo más pequeño, de unos escasos segundos o milisegundos frente a las decenas de segundos de un video ya grabado.
Otro uso común es en las telecomunicaciones, por ejemplo, en los rúters, dónde cada uno tiene un buffer donde almacenar los paquetes que recibe hasta que puede enviarlos por el canal correspondiente, por ello es común que cuando hay muchos dispositivos usando un mismo rúter o un mismo servidor en internet haya perdida de paquetes, ya que el buffer se llenará y todos los paquetes que no quepan se desecharán haciendo que desde el cliente se verá como si no hubiera conexión con el servidor.