¿Cuál es la diferencia entre un caché y un búfer?


Respuestas:


11

Del artículo de Wikipedia sobre memorias intermedias de datos :

un búfer es una región de almacenamiento de memoria física que se utiliza para retener temporalmente los datos mientras se mueven de un lugar a otro

Un búfer termina recorriendo y reteniendo cada pieza de datos que se transmite de una ubicación de almacenamiento a otra (como cuando se usa un búfer circular en el procesamiento de audio). Un búfer permite justamente eso: un "búfer" de datos antes y después de su posición actual en el flujo de datos.

De hecho, hay algunos aspectos comunes de un búfer y un caché. Sin embargo, el caché en el sentido convencional generalmente no almacena todos los datos cuando se mueve de un lugar a otro (es decir, el caché de la CPU).

El propósito de una memoria caché es almacenar datos de manera transparente, de modo que se almacenen datos suficientes para que los datos restantes puedan transferirse sin ninguna penalización de rendimiento. En este contexto, el caché solo "busca previamente" una pequeña cantidad de datos (dependiendo de las tasas de transferencia, tamaños de caché, etc.).

La principal diferencia es que un búfer eventualmente habrá contenido todos los datos. Por el contrario, un caché puede contener todos, algunos o ninguno de los datos (según el diseño). Sin embargo, se accede a un caché como si estuviera accediendo directamente a los datos en primer lugar; lo que se almacena en caché exactamente es transparente para el "usuario" del caché.


La diferencia está en la interfaz . Cuando se utiliza una caché para acceder a una fuente de datos, lo usa como si la caché es la fuente de datos - se puede acceder a todas las partes de la fuente de datos a través de la caché y la memoria caché va a determinar dónde proceden los datos (la caché en sí, o la fuente). El caché en sí mismo determina qué partes de los datos precargar (generalmente solo el comienzo, pero a veces todo), mientras que el algoritmo de reemplazo de caché en uso determina qué / cuándo se eliminan las cosas del caché. El mejor ejemplo de esto es un sistema, además de la memoria caché de la CPU , es prefetcher / readahead. Ambos cargan las partes de datos que creen que usará más en la memoria y vuelven al disco duro si algo no está en caché.

Por el contrario, un búfer no se puede usar para mover instantáneamente su ubicación en el flujo de datos, a menos que la nueva parte ya se haya movido al búfer. Para hacerlo, sería necesario reubicar el búfer (dado que la nueva ubicación excede la longitud del búfer), lo que efectivamente requiere que "reinicie" el búfer desde una nueva ubicación. El mejor ejemplo de esto es mover el control deslizante en un video de Youtube.

Otro buen ejemplo de un búfer es reproducir audio en Winamp. Dado que los archivos de audio deben ser decodificados por la CPU, lleva un tiempo entre el momento en que se lee la canción, el momento en que se procesa el audio y el momento en que se envía a la tarjeta de sonido. Winamp almacenará en búfer algunos de los datos de audio, de modo que haya suficientes datos de audio ya procesados ​​para evitar cualquier "bloqueo" (es decir, la CPU siempre está preparando el audio que escuchará en unos pocos cientos de milisegundos, nunca es en tiempo real ; lo que escucha proviene del búfer, que es lo que la CPU preparó en el pasado).


Supongo que en su ejemplo de Youtube, si el video se ha guardado completamente en el búfer, es decir, se ha descargado en su dispositivo, simplemente se almacena en caché y no tiene que buscar una nueva ubicación cada vez que mueve la diapositiva a menos que actualice la página o vuelva a cargar el vídeo. ¿Sería eso correcto?
PeanutsMonkey

@PeanutsMonkey correcto, el video de Youtube se descarga directamente en la memoria caché de su navegador a medida que se almacena en el búfer. El búfer en este caso es simplemente un término de alto nivel, ya que siempre está viendo lo que actualmente se encuentra en el caché. A medida que el video se almacena en búfer, se mueve a la caché (comparten la misma ubicación física). Actualicé la respuesta con otro ejemplo de un búfer, en el contexto de reproductores de audio.
Avance el

2
tl; versión dr: si desea obtener los datos de la forma más rápida posible, es un búfer. Si desea mantener los datos en él el mayor tiempo posible, es un caché.
David Schwartz

10

Sería más exacto decir que un caché es un patrón de uso particular de un búfer, que implica múltiples usos de los mismos datos. La mayoría de los usos de "buffer" implican que los datos serán drenados o descartados después de un solo uso (aunque este no es necesariamente el caso), mientras que "cache" implica que los datos se reutilizarán varias veces. El almacenamiento en caché también a menudo implica que los datos se almacenan, ya que también se usan simultáneamente, aunque este no es necesariamente el caso (como en la búsqueda previa y similares), mientras que el almacenamiento en búfer implica que los datos se almacenan para su uso posterior.

Sin embargo, existe una gran superposición tanto en la implementación como en el uso.


3

Una diferencia importante entre el caché y el búfer es:

El búfer es una parte de la memoria primaria. Son estructuras presentes y a las que se accede desde la memoria primaria (RAM).

Por otro lado, el caché es una memoria física separada en la jerarquía de memoria de una computadora.

El búfer también se llama a veces como - caché de búfer. Este nombre hace hincapié en el hecho de que el uso del búfer es similar al del caché, es decir, para almacenar datos. mientras que la diferencia radica en el contexto de su uso.

Las memorias intermedias se utilizan para almacenar datos temporalmente, mientras que los datos se mueven de un objeto a otro. EJ: cuando un video se mueve de Internet a nuestra PC para que los buffers de pantalla se usen para almacenar los cuadros del video que se mostrarán a continuación. (Esto aumenta la calidad del servicio, ya que el video correría suavemente después de un proceso de almacenamiento exitoso). EJ: otro ejemplo es el escenario cuando escribimos datos en nuestros archivos. Los datos recién escritos no se copian en la memoria secundaria instantáneamente. Los cambios realizados se almacenan en el búfer y luego, de acuerdo con la política diseñada, los cambios se reflejan nuevamente en el archivo en la memoria secundaria (disco duro).

Las memorias caché, por otro lado, se utilizan entre la memoria primaria y los procesadores, para cerrar la brecha entre la velocidad de ejecución de RAM y el procesador. Además, los datos a los que se accede con más frecuencia se almacenan en la caché para reducir el acceso a la RAM.


-1 escribe "caché es una memoria física separada" <--- No. No necesariamente. IE almacena caché en HDD y sin duda lo carga en RAM stackoverflow.com/questions/854412/… No creo que el código C pueda especificar cargarlo en la memoria física conocida como caché. Lo que se pone en ese caché es más una cosa de bajo nivel, tal vez solo el sistema operativo puede especificar. Pero todavía se llama caché aunque esté en RAM. Y el calamar del servidor web puede configurar un caché, no hay razón para pensar que todo está en la memoria caché física o que debe estarlo.
barlop

el almacenamiento en caché es una función, no tiene que estar en una memoria especial
barlop

1

Algo común: ambos son componentes intermedios de almacenamiento de datos (software o hardware) entre la computación y el almacenamiento "principal".

Para mí la diferencia es la siguiente:

Buffer:

  • Maneja el acceso secuencial a los datos (por ejemplo, leer / escribir datos desde un archivo o socket)
  • Permite la interfaz entre la computación y el almacenamiento principal, se adapta entre sí los diferentes patrones de transferencia de datos de un productor de datos y un consumidor de datos. Por ejemplo, la computación escribe pequeños fragmentos de datos, pero la unidad de disco solo puede aceptar datos de un tamaño específico. Entonces el búfer acumula piezas pequeñas como entrada y las reagrupa en piezas más grandes de la salida.
  • Por lo tanto, es como un patrón de diseño del adaptador . Se une a dos componentes interactivos que no pueden interoperar directamente.
  • Ejemplos: buffer de disco, BufferedReader en lenguaje Java, amortiguamiento en gráficos de computadora.

Cache:

  • Maneja el acceso aleatorio a los datos (p. Ej., El caché de la CPU almacena en caché líneas de memoria que se ubican de manera no necesaria secuencialmente).
  • Optimiza el acceso al almacenamiento principal, lo hace más rápido. Por ejemplo, el caché de la CPU evita los accesos a la memoria, lo que hace que los comandos de la CPU sean más rápidos.
  • Es como un patrón de diseño Decorador . Se une (a menudo de manera transparente) a dos componentes que interactúan y que en principio podrían interactuar directamente, pero hace que la interacción sea más rápida.
  • Ejemplos: caché de CPU, caché de página, proxy web, caché del navegador.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.