Dire che una cache è un tipo speciale di buffer corretto? Entrambi svolgono funzioni simili, ma c'è qualche differenza di fondo che mi manca?
Dire che una cache è un tipo speciale di buffer corretto? Entrambi svolgono funzioni simili, ma c'è qualche differenza di fondo che mi manca?
Risposte:
Dall'articolo di Wikipedia sui buffer di dati :
un buffer è una regione di memoria fisica utilizzata per conservare temporaneamente i dati mentre vengono spostati da una posizione a un'altra
Un buffer finisce per scorrere e conservare ogni singolo dato che viene trasmesso da una posizione di archiviazione a un'altra (come quando si utilizza un buffer circolare nell'elaborazione audio). Un buffer consente proprio questo: un "buffer" di dati prima e dopo la posizione corrente nel flusso di dati.
In effetti, ci sono alcuni aspetti comuni di un buffer e una cache. Tuttavia, la cache in senso convenzionale di solito non memorizza tutti i dati quando vengono spostati da un luogo all'altro (ad esempio cache della CPU).
Lo scopo di una cache è di archiviare i dati in modo trasparente, in modo tale che i dati sufficienti vengano memorizzati nella cache in modo che i dati rimanenti possano essere trasferiti senza alcuna penalità di prestazione. In questo contesto, la cache "preleva" solo una piccola quantità di dati (a seconda della velocità di trasferimento, delle dimensioni della cache, ecc ...).
La differenza principale è che un buffer alla fine avrà conservato tutti i dati. Al contrario, una cache potrebbe contenere tutti, alcuni o nessuno dei dati (a seconda del design). Tuttavia, si accede a una cache come se si stesse accedendo direttamente ai dati in primo luogo: ciò che viene esattamente memorizzato nella cache è trasparente per "l'utente" della cache.
La differenza sta nell'interfaccia . Quando si utilizza una cache per accedere a un'origine dati, la si utilizza come se la cache fosse l'origine dati: è possibile accedere a ogni parte dell'origine dati attraverso la cache e la cache determinerà da dove provengono i dati (il cache stessa o sorgente). La stessa cache determina quali parti dei dati precaricare (di solito solo l'inizio, ma a volte tutte), mentre l' algoritmo di sostituzione della cache in uso determina cosa / quando le cose vengono rimosse dalla cache. Il miglior esempio di questo è un sistema, a parte la cache della CPU stessa, è prefetcher / readahead. Entrambi caricano le parti di dati che pensano che userete di più in memoria e ripristinano il disco rigido se qualcosa non viene memorizzato nella cache.
Al contrario, un buffer non può essere utilizzato per spostare istantaneamente la posizione nel flusso di dati, a meno che la nuova parte non sia già stata spostata nel buffer. Per fare ciò richiederebbe il riposizionamento del buffer (dato che la nuova posizione supera la lunghezza del buffer), richiedendo effettivamente di "riavviare" il buffer da una nuova posizione. Il miglior esempio di ciò è spostare il cursore in un video di Youtube.
Un altro buon esempio di buffer è la riproduzione dell'audio in Winamp. Poiché i file audio devono essere decodificati dalla CPU, ci vuole del tempo tra il momento in cui il brano viene letto, a quando viene elaborato l'audio, a quando viene inviato alla scheda audio. Winamp eseguirà il buffering di alcuni dei dati audio, in modo che vi siano già sufficienti dati audio elaborati per evitare qualsiasi "blocco" (ovvero la CPU prepara sempre l'audio che ascolterai in poche centinaia di millisecondi, non è mai in tempo reale ; ciò che senti proviene dal buffer, che è ciò che la CPU ha preparato in passato).
Sarebbe più preciso affermare che una cache è un particolare modello di utilizzo di un buffer, il che implica molteplici usi degli stessi dati. La maggior parte degli usi di "buffer" implica che i dati verranno svuotati o eliminati dopo un singolo utilizzo (anche se questo non è necessariamente il caso), mentre "cache" implica che i dati verranno riutilizzati più volte. La memorizzazione nella cache spesso implica anche che i dati vengano archiviati così come vengono utilizzati contemporaneamente, sebbene ciò non sia necessariamente il caso (come nel pre-recupero e simili), mentre il buffering implica che i dati vengano archiviati per un uso successivo.
Vi è certamente una grande sovrapposizione sia nell'implementazione che nell'utilizzo.
Una differenza importante tra cache e buffer è:
Il buffer è una parte della memoria principale. Sono strutture presenti e accessibili dalla memoria primaria (RAM).
D'altra parte, la cache è una memoria fisica separata nella gerarchia di memoria di un computer.
Il buffer viene talvolta chiamato anche - Cache buffer. Questo nome sottolinea il fatto che l'uso del buffer è simile a quello della cache, ovvero alla memorizzazione dei dati. mentre la differenza sta nel contesto del suo utilizzo.
I buffer vengono utilizzati per l'archiviazione temporanea dei dati, mentre i dati vengono spostati da un oggetto a un altro. ES: quando un video viene spostato da Internet sul nostro PC per i buffer di visualizzazione vengono utilizzati per memorizzare i frame del video che verrebbero visualizzati successivamente. (QUESTO AUMENTA IL QoS, COME AVREBBE FUNZIONATO LENTAMENTE IL VIDEO DOPO UN PROCESSO DI BUFFERING DI SUCCESSO.) ES: un altro esempio è lo scenario in cui scriviamo dati sui nostri file. I dati appena scritti non vengono copiati istantaneamente nella memoria secondaria. Le modifiche apportate vengono archiviate nel buffer e quindi in base alla politica progettata, le modifiche vengono riportate nel file nella memoria secondaria (disco rigido).
Le cache, d'altra parte, vengono utilizzate tra la memoria principale e i processori, per colmare il divario tra la velocità di esecuzione della RAM e il processore. Inoltre, i dati a cui si accede più frequentemente vengono archiviati nella cache per ridurre l'accesso alla RAM.
Cosa comune: entrambi sono componenti intermedi di archiviazione dei dati (software o hardware) tra il calcolo e lo storage "principale".
Per me la differenza è la seguente:
Buffer:
cache: