# Buffer múltiple

En informática, un buffer múltiple es el uso de más de un buffer para el almacenamiento de un bloque de datos. Si estos datos están siendo leídos y escritos al mismo tiempo, un buffer múltiple permite al "lector" obtener una visión completa de los datos (aunque no esté actualizada), en vez de tener una versión parcialmente actualizada de los datos que están siendo creados por el "escritor". También se usa para evitar la necesidad de usar RAM de doble puerto cuando los lectores y escritores son diferentes dispositivos.

## Descripción

La forma más fácil de explicar cómo funciona un buffer múltiple es utilizando un ejemplo del mundo real:
Es un día soleado y decides sacar la piscina para el jardín, pero no encuentras la manguera, así que tienes que llenarla con cubos de agua. Así que llenas un cubo de agua (o buffer) del grifo (o fuente), cierras el grifo, llevas el cubo hasta la piscina, echas el agua dentro y vuelves al grifo para repetir el proceso. Esto es análogo al uso de un solo buffer. El grifo tiene que estar apagado mientras tú "procesas" el cubo de agua.
Ahora, piensa como lo harías si tuvieras dos cubos. Podrías llenar el primer cubo y cambiar al segundo mientras el grifo está abierto, de manera que tienes el periodo de tiempo que tarde en llenarse, para vaciar el primer cubo en la piscina. Cuando vuelvas, puedes cambiar los cubos de nuevo, de manera que vuelva a llenarse el primero mientras vacías el segundo en la piscina. Esto puede repetirse hasta que la piscina esté llena.
Es fácil ver que esta técnica llenará la piscina mucho más rápidamente que cuando se está esperando mientras que se llenan los cubos.
Esto es análogo al buffer doble. La fuente puede estar funcionando todo el tiempo pero no es necesario esperar mientras que se ejecuta el proceso.
Si se emplea a otra persona para llevar cubos a la piscina mientras uno está llenándose y otro vaciándose, esto sería análogo al buffer triple. Si este paso dura lo suficiente, podrían emplearse más cubos, con lo que el grifo estaría continuamente llenando cubos.
En informática la situación de tener una fuente que no puede, o no debe, ser cerrada es común (como en un Streaming de audio). Además, los ordenadores prefieren trabajar con porciones de datos antes que con corrientes (streams). En dichas situaciones suelen emplearse los buffers dobles.

## Variabilidad
### Doble buffer
#### Red de Petri

La red de Petri de la ilustración muestra cómo trabaja un doble buffer; a saber:
Las transiciones W1 y W2 representan la escrituras de los buffers 1 y 2 respectivamente, mientras R1 y R2 representan la lectura de los buffers 1 y 2 respectivamente.
Al principio solo la transición W1 está activada. Cuando W1 acaba, tanto R1 como W2 están activas por lo que pueden proceder en paralelo. Cuando acaban, R2 y W1 proceden también en paralelo y así sucesivamente.
Después de la transición inicial (en la que solo W1 se inicia ) el sistema es periódico y las transiciones se activan siempre por pares (R1 con W2 y R2 con W1 respectivamente).
Esta red de Petri es viva y segura.

#### En gráficos por ordenador

En gráficos de computadora, el doble buffer es una técnica para la presentación de gráficos en tiempo real que elimina o reduce considerablemente el número de parpadeos, ruido u otros artefactos.
Es difícil que un programa refresque la imagen en una pantalla sin que los píxeles cambien más de una vez. Por ejemplo, para actualizar una página de texto es mucho más fácil borrar toda la página y, a continuación, dibujar las letras de nuevo, que borrar todos los píxeles que están presentes en la nueva imagen. Sin embargo, esta imagen intermedia (cuando se borran todos los píxeles) es percibida por el usuario como un parpadeo. Los monitores de ordenador constantemente redibujan su imagen visible (en torno a 60 veces por segundo), por lo que incluso una actualización perfecta puede ser visible momentáneamente como un divisor horizontal entre la "nueva" imagen y la "vieja" (efecto conocido como lagrimeo).
Una aplicación de software de almacenamiento en buffer doble almacena sus resultados en alguna región de la memoria RAM del sistema, cualquier región, a menudo se denomina "buffer de reserva". Cuando todas las operaciones de dibujo se consideran completadas, toda la región (o solo la parte modificada) se copia en la memoria RAM de vídeo (el "buffer frontal"), lo que suele ser la copia sincronizada con la viga de la trama del monitor con el fin de evitar que se rompa. El doble buffering necesariamente requiere más memoria de vídeo y el tiempo de CPU que el buffer, solo por la memoria de vídeo asignada para el buffer de reserva, el tiempo para la operación de copia, y el tiempo de espera para la sincronización.
Los gestores de ventanas de composición a menudo combinan la "copia" de la operación de "composición", utilizada para la posición de las ventanas, transformándolos con efectos de escala o deformaciones, y hacen partes transparentes. Así, el "buffer frente" solo puede contener la imagen compuesta vista en pantalla, mientras que hay otro "buffer de reserva" para cada ventana que contiene la imagen no compuesta del contenido de la ventana entera.

### Triple buffer

En gráficos de computadora, el triple buffering es similar a la doble buffer, pero proporciona una mejora de la velocidad. En el doble buffer, el programa debe esperar hasta que el dibujo terminado se copia o se cambió antes de comenzar el próximo cambio. Este período de espera podría ser de varios milisegundos durante el cual no se puede tocar el buffer.
En triple buffering el programa cuenta con dos amortiguadores nuevos e inmediatamente puede empezar a dibujar el que no participa en dicha copia. El buffer en tercer lugar, el buffer frontal, es leído por la tarjeta gráfica para mostrar la imagen en el monitor. Una vez que el monitor ha sido actualizado, el buffer frontal se voltea con (o copiado de) el buffer de reserva. Dado que uno de los topes de vuelta siempre está completo, la tarjeta gráfica no tiene que esperar para que el software esté completo. En consecuencia, el software y la tarjeta gráfica son completamente independientes, y se puede ejecutar a su propio ritmo. Por último, la imagen mostrada se inició sin esperar a la sincronización y por lo tanto con un desfase mínimo. [1]
Debido a que el algoritmo de software no tener que sondear el hardware de gráficos para controlar los eventos de actualización, el algoritmo es libre de correr tan rápido como sea posible. Esto puede significar que varios dibujos que nunca se muestran son por escrito a los topes de vuelta. Este no es el único método de triple buffer disponible, pero es el más frecuente en la arquitectura de la PC donde la velocidad de la máquina de destino es muy variable.
Otro método de triple buffering implica la sincronización con la velocidad de fotogramas del monitor. El dibujo no se hace si los dos amortiguadores posteriores contienen imágenes terminadas que no se han mostrado todavía. Esto evita la pérdida de la CPU dibujando imágenes Undisplayed y también da lugar a una velocidad más constante (suave movimiento de objetos en movimiento), pero con aumento de la latencia. [2] Este es el caso cuando se utiliza triple buffer en DirectX, donde una cadena de 3 buffer son prestados y que aparecen siempre.
El buffer triple implica tres topes, pero el método puede extenderse a muchos como amortiguadores que resulte práctico para la aplicación. Por lo general, no hay ninguna ventaja de usar más de tres topes.

### Cuádruple buffer

El término "buffering cuádruple" se utiliza en las implementaciones de estereoscópico, y significa el uso de doble buffer para cada una de las imágenes del ojo izquierdo y derecho, por lo tanto hay cuatro topes totales. El comando para intercambiar o copiar el buffer normalmente se aplica a los dos pares a la vez. Si triple buffering se utilizó entonces sería de seis topes.

## Voltear la página

En este método (a veces llamado el buffer de ping-pong), en lugar de copiar los datos, los amortiguadores son capaces de ser mostrados (ambos están en VRAM). En un momento dado, un buffer se puede mostrar en el monitor, mientras que el otro buffer se está elaborando. Cuando el dibujo está completo, las funciones de los dos se conectan. La página-flip se consigue normalmente mediante la modificación del valor de un puntero al comienzo de la visualización de datos en la memoria de vídeo.
La página-flip es mucho más rápida que copiar los datos y puede garantizar que la ruptura no se verá, siempre y cuando las páginas se cambian durante el período verticales en blanco del monitor cuando no hay datos de video o se está elaborando. El buffer activo y visible se llama el buffer frontal, mientras que la página de fondo se llama el "buffer de reserva.

## Otros usos

El término buffer doble se utiliza para copiar datos entre dos buffers para el acceso directo a memoria (Direct Memory Access, DMA) de las transferencias; no para mejorar el rendimiento, sino para satisfacer los requisitos específicos de direccionamiento de un dispositivo (especialmente los dispositivos de 32 bits en sistemas con direccionamiento más amplio, siempre a través de Extensión de Dirección Física). [3] Los controladores de dispositivos de Microsoft Windows son particularmente notables como un lugar donde el doble buffer sería viable de utilizar. En un sistema Linux o BSD éstos son llamados bounce buffers porque los datos deben "brincar" a través de estos buffers para entrada (input) o salida (output). El doble buffering también se utiliza como una técnica para facilitar el entrelazado o desentrelazado de señales de vídeo.