Estructuras de datos: Tu rápida introducción a los buffers circulares

2 de mayo, 2019 – 4 min read

.

Foto de James Thomas en Unsplash

¿Alguna vez has abierto tu ordenador y has empezado a escribir tu contraseña sólo para ver un gran retraso en lo que estás escribiendo? Este retraso se produce cuando el procesador del ordenador se despierta y se da cuenta de que tiene que empezar a tomar datos del miniprocesador del teclado. Pero, ¿cómo se almacena esta información si sólo hay un poco de espacio en la memoria del teclado?

Aquí es donde entra el búfer circular.

El búfer circular es un cierto tipo de cola. Ahora bien, si no estás familiarizado con una cola, puede que la conozcas como una línea. (Como cuando esperas en la fila para usar el baño.) Esta cola es una estructura de primero en entrar, primero en salir (FIFO). Esto significa que la primera persona que entra en la cola es la primera que sale. Entonces, ¿qué tiene de diferente una cola circular?

Un buffer circular almacena los datos en una matriz de tamaño fijo. Así que una vez que se establece el tamaño y el búfer está lleno, el elemento más antiguo en el búfer será expulsado si se añaden más datos. Al almacenar dos punteros a la parte delantera y trasera de la estructura, no hay necesidad de manipular dinámicamente la matriz.

Sin embargo, si el buffer está lleno y necesitas añadir algo nuevo, simplemente establece el elemento de la lista apuntado por el puntero trasero al nuevo elemento e incrementa el puntero trasero en uno. El frontal apuntará ahora al elemento añadido más recientemente.

Esta técnica de asignación de memoria tiene ventajas cuando se trabaja con muchos datos en tiempo real. A medida que se añaden más datos a la estructura, los datos antiguos serán eliminados, por lo que nunca será necesario desplazar los datos. Como se ha dicho antes, los punteros sólo cambian de posición.

Ahora volvamos al teclado y a la entrada de la contraseña. Todas tus pulsaciones se mantienen en un buffer circular. Así que si escribes lo suficientemente rápido, potencialmente perderías parte de la entrada recibida de las pulsaciones.

Un restaurante con buffer circular mal dibujado.

Para ayudar a imaginar el buffer circular, vamos a construir un restaurante automatizado. Este restaurante tiene una sola ventana de recogida (la parte trasera del buffer) donde un cliente a la vez puede recoger su comida (los datos). Detrás de la ventanilla hay una mesa circular giratoria con capacidad para 8 comidas (el buffer). También hay una luz que apunta a la parte delantera de la mesa (o a la parte delantera del buffer). Cada vez que se saca una comida de la ventana, la mesa gira un punto en el sentido de las agujas del reloj.

Cuando el chef ha terminado de cocinar una comida, la coloca un punto delante del lugar que está iluminado. La luz brilla entonces sobre el plato recién colocado. Si el tampón está lleno y una comida está lista para salir de la estufa, la comida en la ventana se tirará a la basura. La mesa girará y la nueva comida se colocará en el lugar vacío.

Casos de uso

Un instructor me habló una vez de una empresa de tecnología de realidad aumentada que utilizaba un búfer circular para guardar los fotogramas de los movimientos introducidos por el usuario. Grababan el movimiento de la mano y el cuerpo del usuario y lo transmitían a una pantalla en tiempo real. Si el usuario introducía muchos movimientos en un corto periodo de tiempo, éstos se almacenaban.

Cuando se rebobina unos minutos de una película o programa de televisión en streaming, esos fotogramas anteriores se almacenan en una memoria circular para poder acceder a ellos rápidamente. Si rebobinas más fotogramas de los que están almacenados en el buffer, tardará más tiempo en volver a cargar los fotogramas que estás buscando.

En conclusión, si necesitas acceder rápidamente a datos de streaming que ya han sido observados o utilizados, ¡un buffer circular podría ser una buena solución!

Deja una respuesta

Tu dirección de correo electrónico no será publicada.