Ist die Aussage, dass ein Cache eine besondere Art von Puffer ist, korrekt? Beide führen ähnliche Funktionen aus, aber gibt es einen Unterschied, den ich vermisse?
Ist die Aussage, dass ein Cache eine besondere Art von Puffer ist, korrekt? Beide führen ähnliche Funktionen aus, aber gibt es einen Unterschied, den ich vermisse?
Antworten:
Aus dem Wikipedia-Artikel über Datenpuffer :
Ein Puffer ist ein Bereich eines physischen Speichers, in dem Daten vorübergehend gespeichert werden, während sie von einem Ort an einen anderen verschoben werden
Ein Puffer durchläuft und speichert 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.
In der Tat gibt es einige gemeinsame Aspekte eines Puffers und eines Caches. Der Cache im herkömmlichen Sinne speichert jedoch normalerweise nicht alle Daten, wenn er von Ort zu Ort verschoben wird (dh CPU-Cache).
Der Zweck eines Caches besteht darin, Daten auf transparente Weise zu speichern, sodass gerade genug Daten zwischengespeichert werden, damit die verbleibenden Daten ohne Leistungseinbußen übertragen werden können. In diesem Zusammenhang "holt" der Cache nur eine kleine Datenmenge vor (abhängig von den Übertragungsraten, Cache-Größen usw.).
Der Hauptunterschied besteht darin, dass ein Puffer möglicherweise alle Daten enthält. Umgekehrt enthält ein Cache möglicherweise alle, einige oder keine Daten (je nach Design). Auf einen Cache wird jedoch zugegriffen, als ob Sie überhaupt direkt auf die Daten zugreifen würden. Was genau zwischengespeichert wird, ist für den "Benutzer" des Caches transparent.
Der Unterschied liegt in der Schnittstelle . Wenn Sie einen Cache verwenden eine Datenquelle zugreifen zu können , verwenden Sie es , als ob der Cache ist die Datenquelle - Sie jeden Teil der Datenquelle durch den Cache zugreifen können, und der Cache wird bestimmen , wo die Daten aus (das kommt Cache selbst oder die Quelle). Der Cache selbst bestimmt, welche Teile der Daten vorab geladen werden sollen (normalerweise nur der Anfang, manchmal aber auch alle), während der verwendete Cache-Ersetzungsalgorithmus bestimmt, welche / wann Dinge aus dem Cache entfernt werden. Das beste Beispiel hierfür ist ein System, das neben dem CPU-Cache selbst Prefetcher / Readahead ist. Beide laden die Teile der Daten, von denen sie glauben, dass Sie sie am meisten verwenden, in den Speicher und kehren zur Festplatte zurück, wenn etwas nicht zwischengespeichert ist.
Umgekehrt kann ein Puffer nicht verwendet werden, um Ihren Speicherort im Datenstrom sofort zu verschieben, es sei denn, der neue Teil wurde bereits in den Puffer verschoben. Um dies zu tun, müsste der Puffer verschoben werden (vorausgesetzt, der neue Speicherort überschreitet die Pufferlänge), sodass Sie den Puffer effektiv von einem neuen Speicherort 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 Wiedergabe von Audio in Winamp. Da Audiodateien von der CPU dekodiert werden müssen, dauert es einige Zeit zwischen dem Einlesen des Songs, dem Verarbeiten des Audios und dem Senden an Ihre Soundkarte. Winamp puffert einige der Audiodaten, so dass bereits genügend Audiodaten verarbeitet wurden, um "Abstürze" zu vermeiden (dh die CPU bereitet das Audio, das Sie in wenigen hundert Millisekunden hören, immer vor, es ist nie in Echtzeit ; was Sie hören, kommt aus dem Puffer, den die CPU in der Vergangenheit vorbereitet hat).
Es wäre genauer zu sagen, dass ein Cache ein bestimmtes Verwendungsmuster eines Puffers ist, das mehrere Verwendungen derselben Daten impliziert. Die meisten Verwendungen von "Puffer" implizieren, dass die Daten nach einer einmaligen Verwendung entleert oder verworfen werden (obwohl dies nicht unbedingt der Fall ist), während "Cache" impliziert, dass die Daten mehrmals wiederverwendet werden. Das Zwischenspeichern impliziert häufig auch, dass die Daten gespeichert werden, da sie auch gleichzeitig verwendet werden, obwohl dies nicht unbedingt der Fall ist (wie beim Vorabrufen und dergleichen), während das Puffern impliziert, dass die Daten für die spätere Verwendung gespeichert werden.
Es gibt jedoch sicherlich eine große Überschneidung sowohl bei der Implementierung als auch bei der Verwendung.
Ein wichtiger Unterschied zwischen Cache und Puffer ist:
Der Puffer ist ein Teil des Primärspeichers. Sie sind Strukturen, die vom Primärspeicher (RAM) vorhanden sind und auf die zugegriffen wird.
Andererseits ist der Cache ein separater physischer Speicher in der Speicherhierarchie eines Computers.
Puffer wird manchmal auch als - Puffercache bezeichnet. Dieser Name betont die Tatsache, dass die Verwendung von Puffer der von Cache ähnlich ist, dh zum Speichern von Daten. während der Unterschied im Kontext seiner Verwendung liegt.
Puffer werden zum vorübergehenden Speichern von Daten verwendet, während die Daten von einem Objekt zu einem anderen verschoben werden. EX: Wenn ein Video aus dem Internet auf unseren PC verschoben wird, werden die Anzeigepuffer zum Speichern der Bilder des Videos verwendet, die als Nächstes angezeigt werden. (Dies erhöht die QoS, da das Video nach einem erfolgreichen Pufferprozess reibungslos ausgeführt werden würde.) EX: Ein weiteres Beispiel ist das Szenario, in dem 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 gemäß der festgelegten Richtlinie werden die Änderungen in die Datei im Sekundärspeicher (Festplatte) zurückgespiegelt.
Caches hingegen werden zwischen dem Primärspeicher und den Prozessoren verwendet, um die Lücke zwischen der Ausführungsgeschwindigkeit des RAM und dem Prozessor zu schließen. Außerdem werden die Daten, auf die am häufigsten zugegriffen wird, im Cache gespeichert, um den Zugriff auf den Arbeitsspeicher zu verringern.
Gemeinsame Sache: Beide sind zwischengeschaltete Datenspeicherkomponenten (Software oder Hardware) zwischen Berechnung und "Hauptspeicher".
Für mich ist der Unterschied der folgende:
Puffer:
Zwischenspeicher: