Quelle est la différence entre un cache et un tampon?

12

Est-ce que dire qu'un cache est un type spécial de tampon correct? Ils remplissent tous deux des fonctions similaires, mais y a-t-il une différence sous-jacente qui me manque?

Dharini Chandrasekaran
la source
stackoverflow.com/questions/6345020/…
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Réponses:

12

Extrait de l'article de Wikipedia sur les tampons de données :

un tampon est une région d'une mémoire physique utilisée pour stocker temporairement des données pendant leur déplacement d'un endroit à un autre

Un tampon finit par parcourir et contenir chaque élément de données transmis d'un emplacement de stockage à un autre (comme lors de l'utilisation d'un tampon circulaire dans le traitement audio). Un tampon permet exactement cela - un "tampon" de données avant et après votre position actuelle dans le flux de données.

En effet, il existe certains aspects communs d'un tampon et d'un cache. Cependant, le cache au sens conventionnel ne stocke généralement pas toutes les données lorsqu'il est déplacé d'un endroit à l'autre (c.-à-d. Le cache du processeur).

Le but d'un cache est de stocker des données de manière transparente, de sorte que juste assez de données soient mises en cache pour que les données restantes puissent être transférées sans aucune perte de performances. Dans ce contexte, le cache ne "prélève" qu'une petite quantité de données (en fonction des taux de transfert, des tailles de cache, etc ...).

La principale différence est qu'un tampon aura éventuellement contenu toutes les données. Inversement, un cache peut contenir toutes, certaines ou aucune des données (selon la conception). Cependant, un cache est accessible comme si vous accédiez directement aux données en premier lieu - ce qui est exactement mis en cache est transparent pour "l'utilisateur" du cache.


La différence réside dans l' interface . Lorsque vous utilisez un cache pour accéder à une source de données, vous l'utilisez comme si le cache est la source de données - vous pouvez accéder à toutes les parties de la source de données via le cache, et le cache déterminera d'où viennent les données (le cache lui-même, ou la source). Le cache lui-même détermine quelles parties des données à précharger (généralement juste le début, mais parfois toutes), tandis que l' algorithme de remplacement du cache utilisé détermine quoi / quand les éléments sont supprimés du cache. Le meilleur exemple de ceci est un système, à part le cache CPU lui-même, est prefetcher / readahead. Les deux chargent les parties de données qu'ils pensent que vous utiliserez le plus en mémoire et reviennent sur le disque dur si quelque chose n'est pas mis en cache.

Inversement, un tampon ne peut pas être utilisé pour déplacer instantanément votre position dans le flux de données, sauf si la nouvelle partie a déjà été déplacée vers le tampon. Pour ce faire, il faudrait déplacer le tampon (étant donné que le nouvel emplacement dépasse la longueur du tampon), ce qui vous obligerait à "redémarrer" le tampon à partir d'un nouvel emplacement. Le meilleur exemple de cela est de déplacer le curseur dans une vidéo Youtube.

Un autre bon exemple de tampon est la lecture audio dans Winamp. Étant donné que les fichiers audio doivent être décodés par le processeur, cela prend un certain temps entre le moment où le morceau est lu, le moment où le son est traité et celui où il est envoyé sur votre carte son. Winamp mettra en mémoire tampon certaines des données audio, de sorte qu'il y ait suffisamment de données audio déjà traitées pour éviter tout "blocage" (c'est-à-dire que le CPU prépare toujours l'audio que vous entendrez en quelques centaines de millisecondes, ce n'est jamais en temps réel ; ce que vous entendez vient du tampon, qui est ce que le CPU a préparé dans le passé).

Percée
la source
Je suppose que dans votre exemple de Youtube, si la vidéo a été complètement tamponnée, c'est-à-dire téléchargée sur votre appareil, elle est simplement mise en cache et vous n'avez pas besoin de chercher un nouvel emplacement chaque fois que vous déplacez la diapositive, sauf si vous actualisez la page ou rechargez la vidéo. Serait-ce exact?
PeanutsMonkey
@PeanutsMonkey correct, la vidéo Youtube est téléchargée directement dans le cache de votre navigateur lors de sa mise en mémoire tampon. Dans ce cas, le tampon est simplement un terme de haut niveau, car vous visualisez toujours ce qui se trouve actuellement dans le cache. Lorsque la vidéo est mise en mémoire tampon, elle est déplacée vers le cache (ils partagent le même emplacement physique). J'ai mis à jour la réponse avec un autre exemple de tampon, dans le contexte des lecteurs audio.
Percée du
2
tl; dr version: Si vous voulez en extraire les données le plus rapidement possible, c'est un tampon. Si vous souhaitez conserver les données le plus longtemps possible, c'est un cache.
David Schwartz
10

Il serait plus précis de dire qu'un cache est un modèle d'utilisation particulier d'un tampon, ce qui implique plusieurs utilisations des mêmes données. La plupart des utilisations de "tampon" impliquent que les données seront vidées ou jetées après une seule utilisation (bien que ce ne soit pas nécessairement le cas), tandis que "cache" implique que les données seront réutilisées plusieurs fois. La mise en cache implique également souvent que les données sont stockées car elles sont également utilisées simultanément, bien que ce ne soit pas nécessairement le cas (comme lors de la prélecture et autres), tandis que la mise en mémoire tampon implique que les données sont stockées pour une utilisation ultérieure.

Cependant, il y a certainement un grand chevauchement dans l'implémentation et l'utilisation.

duveteux
la source
3

Une différence importante entre le cache et le tampon est:

Le tampon fait partie de la mémoire primaire. Ce sont des structures présentes et accessibles à partir de la mémoire primaire (RAM).

D'un autre côté, le cache est une mémoire physique distincte dans la hiérarchie de mémoire d'un ordinateur.

Le tampon est aussi parfois appelé as - Cache de tampon. Ce nom souligne le fait que l'utilisation du tampon est similaire à celle du cache, c'est-à-dire pour stocker des données. tandis que la différence réside dans le contexte de son utilisation.

Les tampons sont utilisés pour stocker temporairement des données, tandis que les données sont déplacées d'un objet à un autre. EX: lorsqu'une vidéo est déplacée d'Internet sur notre PC, les tampons d'affichage sont utilisés pour stocker les images de la vidéo qui seront ensuite affichées. (CECI AUGMENTE LA QoS, COMME LA VIDÉO S'EXÉCUTERAIT EN DOUCEUR APRÈS UN PROCESSUS DE TAMPON RÉUSSI.) EX: un autre exemple est le scénario où nous écrivons des données dans nos fichiers. Les données nouvellement écrites ne sont pas copiées instantanément dans la mémoire secondaire. Les modifications apportées sont stockées dans le tampon puis, conformément à la stratégie conçue, les modifications sont renvoyées au fichier dans la mémoire secondaire (disque dur).

Les caches, d'autre part, sont utilisés entre la mémoire primaire et les processeurs, pour combler l'écart entre la vitesse d'exécution de la RAM et le processeur. Les données les plus fréquemment consultées sont également stockées dans le cache pour réduire l'accès à la RAM.

Rubal
la source
-1 vous écrivez "le cache est une mémoire physique séparée" <--- Non. Pas nécessairement. IE stocke le cache sur le disque dur et le charge sans aucun doute dans la RAM stackoverflow.com/questions/854412/… Je ne pense pas que le code C puisse spécifier de le charger dans la mémoire physique connue sous le nom de cache. Ce qui est mis dans ce cache est plus une chose de bas niveau, peut-être que seul le système d'exploitation peut spécifier. Mais il est toujours appelé cache même s'il est en RAM. Et le serveur Web Squid peut mettre en place un cache, aucune raison de penser que tout est dans la mémoire cache physique ou doit l'être.
barlop
la mise en cache est une fonction, elle n'a pas besoin d'être dans une mémoire spéciale
barlop
1

Chose courante: les deux sont des composants intermédiaires de stockage de données (logiciels ou matériels) entre le calcul et le stockage "principal".

Pour moi, la différence est la suivante:

Tampon:

  • Gère l' accès séquentiel aux données (par exemple, lire / écrire des données à partir d'un fichier ou d'un socket)
  • Permet l' interface entre le calcul et le stockage principal, s'adapte les uns aux autres les différents modèles de transfert de données d'un producteur de données et d'un consommateur de données. Par exemple, le calcul écrit de petits morceaux de données, mais le lecteur de disque ne peut accepter que des éléments de données d'une taille spécifique. Ainsi, le tampon accumule de petits morceaux en entrée et les regroupe en de plus gros morceaux de sortie.
  • C'est donc comme un modèle de conception d' adaptateur . Il joint deux composants en interaction qui ne peuvent pas interagir directement.
  • Exemples: tampon de disque, BufferedReader en langage Java, duffering en infographie.

Cache:

  • Gère l' accès aléatoire aux données (par exemple, le cache du processeur met en cache les lignes de mémoire qui se trouvent non nécessaires de manière séquentielle).
  • Optimise l' accès au stockage principal, le rend plus rapide. Par exemple, le cache CPU évite les accès à la mémoire, ce qui accélère les commandes CPU.
  • C'est comme un modèle de conception de décorateur . Il joint (souvent de manière transparente) deux composants en interaction qui pourraient en principe interagir directement, mais il rend l'interaction plus rapide.
  • Exemples: cache CPU, cache de page, proxy web, cache de navigateur.
Alexey
la source