Was ist der Unterschied zwischen einem Cache und einem Puffer?

Was ist der Unterschied zwischen einem Cache und einem Puffer?

Ist es richtig, dass ein Cache eine spezielle Art von Puffer ist? Beide erfüllen ähnliche Funktionen, aber gibt es da einen grundlegenden Unterschied, den ich übersehe?

Antwort1

Aus dem Wikipedia-Artikel überDatenpuffer:

Ein Puffer ist ein Bereich eines physischen Speichers, der zur vorübergehenden Speicherung von Daten dient, während diese von einem Ort zum anderen verschoben werden.

APufferdurchläuft und speichert letztendlich jedes einzelne Datenelement, das von einem Speicherort zu einem anderen übertragen wird (wie bei Verwendung eines Ringpuffers bei der Audioverarbeitung). Ein Puffer ermöglicht genau das – einen „Puffer“ von Daten vor und nach Ihrer aktuellen Position im Datenstrom.

Tatsächlich gibt es einige Gemeinsamkeiten zwischen einem Puffer und einem Cache. Allerdings ist ein Cache im herkömmlichen Sinn normalerweisenichtSpeichern Sie alle Daten, wenn sie von einem Ort zu einem anderen verschoben werden (d. h. CPU-Cache).

Der Zweck einerZwischenspeicherbesteht darin, Daten transparent zu speichern, sodass gerade genug Daten zwischengespeichert werden, damit die restlichen Daten ohne Leistungseinbußen übertragen werden können. In diesem Zusammenhang ruft der Cache nur eine kleine Datenmenge „vorab ab“ (abhängig von den Übertragungsraten, Cachegrößen usw.).

Der Hauptunterschied besteht darin, dass ein Puffer irgendwann alle Daten enthalten wird. Umgekehrt kann ein Cache alle, einige oder keine Daten enthalten (je nach Design). Auf einen Cache wird jedoch so zugegriffen, als ob Sie direkt auf die Daten zugreifen würden – was genau zwischengespeichert wird, ist für den „Benutzer“ des Cache transparent.


Der Unterschied liegt in derSchnittstelleWenn Sie einen Cache verwenden, um auf eine Datenquelle zuzugreifen, verwenden Sie ihn, als ob der CacheIstdie Datenquelle - Sie können über den Cache auf jeden Teil der Datenquelle zugreifen, und der Cache bestimmt, woher die Daten kommen (der Cache selbst oder die Quelle). Der Cache selbst bestimmt, welche Teile der Daten vorab geladen werden (normalerweise nur der Anfang, manchmal aber auch alle), während derCache-Ersetzungsalgorithmusin Verwendung bestimmt, was/wann Dinge aus dem Cache entfernt werden. Das beste Beispiel hierfür ist ein System, abgesehen vonCPU-Cacheselbst istVorabruf/lesen Sie weiter. Beide laden die Teile der Daten, von denen sie denken, dass Sie sie am häufigsten verwenden, in den Speicher und greifen auf die Festplatte zurück, wenn etwas nicht zwischengespeichert ist.

Umgekehrt kann ein Puffer nicht verwendet werden, um Ihre Position im Datenstrom sofort zu verschieben, es sei denn, der neue Teil wurde bereits in den Puffer verschoben. Dazu müsste der Puffer verschoben werden (da die neue Position die Pufferlänge überschreitet), was effektiv bedeutet, dass Sie den Puffer von einer neuen Position aus „neu starten“ müssen. Das beste Beispiel hierfür ist das Verschieben des Schiebereglers in einem YouTube-Video.

Ein weiteres gutes Beispiel für einen Puffer ist die Audiowiedergabe in Winamp. Da Audiodateien von der CPU dekodiert werden müssen, dauert es einige Zeit, vom Einlesen des Songs über die Verarbeitung des Audios bis hin zur Übermittlung an Ihre Soundkarte. Winamp puffert einige der Audiodaten, sodass bereits genügend Audiodaten verarbeitet sind, um „Blockaden“ zu vermeiden (d. h. die CPU bereitet das Audio, das Sie in einigen hundert Millisekunden hören werden, immer vor, es geschieht nie in Echtzeit; was Sie hören, kommt aus dem Puffer, also aus dem, was die CPU in der Vergangenheit vorbereitet hat).

Antwort2

Genauer gesagt wäre es, wenn man sagen würde, dass ein Cache ein bestimmtes Nutzungsmuster eines Puffers ist, das eine mehrfache Verwendung derselben Daten impliziert. Die meisten Verwendungen von „Puffer“ implizieren, dass die Daten nach einmaliger Verwendung geleert oder verworfen werden (obwohl dies nicht unbedingt der Fall ist), während „Cache“ impliziert, dass die Daten mehrfach wiederverwendet werden. Caching impliziert außerdem oft, dass die Daten gespeichert werden, während sie gleichzeitig verwendet werden, obwohl dies nicht unbedingt der Fall ist (wie beim Vorabrufen und dergleichen), während Puffern impliziert, dass die Daten für eine spätere Verwendung gespeichert werden.

Allerdings gibt es sicherlich große Überschneidungen sowohl bei der Implementierung als auch bei der Nutzung.

Antwort3

Ein wichtiger Unterschied zwischen Cache und Puffer ist:

Der Puffer ist ein Teil des Hauptspeichers. Es handelt sich dabei um Strukturen, die im Hauptspeicher (RAM) vorhanden sind und auf die von dort aus zugegriffen wird.

Andererseits ist der Cache ein separater physischer Speicher in der Speicherhierarchie eines Computers.

Puffer werden manchmal auch als Puffercache bezeichnet. Dieser Name betont die Tatsache, dass die Verwendung des Puffers der des Caches ähnelt, d. h. zum Speichern von Daten. Der Unterschied liegt jedoch im Kontext seiner Verwendung.

Puffer werden zum temporären Speichern von Daten verwendet, während die Daten von einem Objekt zum anderen verschoben werden. Beispiel: Wenn ein Video aus dem Internet auf unseren PC verschoben wird, um es anzuzeigen, werden Puffer verwendet, um die Einzelbilder des Videos zu speichern, die als nächstes angezeigt werden. (DIES ERHÖHT DIE QoS, DA DAS VIDEO NACH EINEM ERFOLGREICHEN PUFFERVORGANG REIBUNGSLOS LÄUFT.) Beispiel: Ein weiteres Beispiel ist das Szenario, wenn wir Daten in unsere Dateien schreiben. Die neu geschriebenen Daten werden nicht sofort in den Sekundärspeicher kopiert. Die vorgenommenen Änderungen werden im Puffer gespeichert und dann gemäß der festgelegten Richtlinie in die Datei im Sekundärspeicher (Festplatte) zurückgespiegelt.

Caches hingegen werden zwischen dem Hauptspeicher und den Prozessoren eingesetzt, um die Lücke zwischen der Ausführungsgeschwindigkeit des RAM und der des Prozessors zu überbrücken. Außerdem werden die am häufigsten aufgerufenen Daten im Cache gespeichert, um den Zugriff auf den RAM zu reduzieren.

Antwort4

Gemeinsamkeit: Beide sind vermittelnde Datenspeicherkomponenten (Software oder Hardware) zwischen Rechenleistung und „Haupt“-Speicher.

Für mich ist der Unterschied folgender:

Puffer:

  • GriffesequentiellZugriff auf Daten (zB Lesen/Schreiben von Daten aus einer Datei oder einem Socket)
  • ErmöglichtSchnittstelle zwischen Rechner und Hauptspeicher,passt sich anDie verschiedenen Datenübertragungsmuster eines Datenproduzenten und eines Datenkonsumenten sind miteinander verknüpft. Beispielsweise schreibt eine Berechnung kleine Datenblöcke, aber das Laufwerk kann nur Datenstücke einer bestimmten Größe aufnehmen. Der Puffer sammelt also kleine Stücke als Eingabe und gruppiert sie zu größeren Stücken der Ausgabe um.
  • Es ist also wie einAdapterEntwurfsmuster. Es verbindet zwei interagierende Komponenten, die nicht direkt zusammenarbeiten können.
  • Beispiele: Festplattenpuffer, BufferedReader in der Java-Sprache, Duffering in der Computergrafik.

Zwischenspeicher:

  • GriffezufälligZugriff auf Daten (z. B. speichert der CPU-Cache Speicherzeilen im Cache, die nicht unbedingt in der erforderlichen Reihenfolge angeordnet sind).
  • OptimiertZugriff auf den Hauptspeicher macht es schneller. Beispielsweise verhindert der CPU-Cache Speicherzugriffe und führt dadurch zu schnelleren CPU-Befehlen.
  • Es ist wie einDekorateurEntwurfsmuster. Es verbindet (oft transparent) zwei interagierende Komponenten, die im Prinzip direkt zusammenarbeiten könnten, beschleunigt die Interaktion jedoch.
  • Beispiele: CPU-Cache, Seiten-Cache, Webproxy, Browser-Cache.

verwandte Informationen