Está dizendo que um cache é um tipo especial de buffer correto? Ambos desempenham funções semelhantes, mas há alguma diferença subjacente que estou perdendo?
Está dizendo que um cache é um tipo especial de buffer correto? Ambos desempenham funções semelhantes, mas há alguma diferença subjacente que estou perdendo?
Respostas:
Do artigo da Wikipedia sobre buffers de dados :
um buffer é uma região de um armazenamento de memória física usado para armazenar temporariamente dados enquanto estão sendo movidos de um local para outro
Um buffer acaba alternando e mantendo todos os dados transmitidos de um local de armazenamento para outro (como ao usar um buffer circular no processamento de áudio). Um buffer permite exatamente isso - um "buffer" de dados antes e depois da sua posição atual no fluxo de dados.
De fato, existem alguns aspectos comuns de um buffer e um cache. No entanto, o cache no sentido convencional geralmente não armazena todos os dados quando estão sendo movidos de um lugar para outro (por exemplo, cache da CPU).
O objetivo de um cache é armazenar dados de maneira transparente, de modo que apenas dados suficientes sejam armazenados em cache para que os dados restantes possam ser transferidos sem nenhuma penalidade de desempenho. Nesse contexto, o cache apenas "busca previamente" uma pequena quantidade de dados (dependendo das taxas de transferência, tamanhos de cache, etc ...).
A principal diferença é que um buffer eventualmente conterá todos os dados. Por outro lado, um cache pode conter todos, alguns ou nenhum dado (dependendo do design). No entanto, um cache é acessado como se você estivesse acessando diretamente os dados em primeiro lugar - o que exatamente é armazenado em cache é transparente para o "usuário" do cache.
A diferença está na interface . Quando você está usando um cache para acessar uma fonte de dados, usa-o como se o cache fosse a fonte de dados - você pode acessar todas as partes da fonte de dados através do cache, e o cache determinará de onde os dados vêm (o próprio cache ou a fonte). O próprio cache determina quais partes dos dados devem ser pré-carregadas (geralmente apenas o começo, mas às vezes todos), enquanto o algoritmo de substituição de cache em uso determina o que / quando as coisas são removidas do cache. O melhor exemplo disso é um sistema, além do próprio cache da CPU , é prefetcher / readahead. Ambos carregam as partes de dados que eles acham que você mais utilizará na memória e revertem para o disco rígido se algo não estiver em cache.
Por outro lado, um buffer não pode ser usado para mover instantaneamente sua localização no fluxo de dados, a menos que a nova peça já tenha sido movida para o buffer. Para fazer isso, seria necessário realocar o buffer (dado que o novo local excede o comprimento do buffer), exigindo efetivamente que você "reinicie" o buffer a partir de um novo local. O melhor exemplo disso é mover o controle deslizante em um vídeo do Youtube.
Outro bom exemplo de buffer é a reprodução de áudio no Winamp. Como os arquivos de áudio precisam ser decodificados pela CPU, leva algum tempo entre a leitura da música, o processamento do áudio e o envio para sua placa de som. O Winamp armazenará em buffer alguns dos dados de áudio, para que haja dados de áudio suficientes já processados para evitar "travamentos" (ou seja, a CPU está sempre preparando o áudio que você ouvirá em algumas centenas de milissegundos, nunca é em tempo real ; o que você ouve vem do buffer, que é o que a CPU preparou no passado).
Seria mais preciso dizer que um cache é um padrão de uso específico de um buffer, que implica vários usos dos mesmos dados. A maioria dos usos de "buffer" implica que os dados serão drenados ou descartados após um único uso (embora esse não seja necessariamente o caso), enquanto "cache" implica que os dados serão reutilizados várias vezes. O armazenamento em cache também implica frequentemente que os dados são armazenados, pois também estão sendo usados simultaneamente, embora esse não seja necessariamente o caso (como na pré-busca e similares), enquanto o armazenamento em buffer implica que os dados estão sendo armazenados para uso posterior.
Certamente, porém, há uma grande sobreposição na implementação e no uso.
Uma diferença importante entre cache e buffer é:
O buffer faz parte da memória principal. São estruturas presentes e acessadas a partir da memória primária (RAM).
Por outro lado, o cache é uma memória física separada na hierarquia de memória de um computador.
Às vezes, o buffer também é chamado de - cache do buffer. Esse nome enfatiza o fato de que o uso do buffer é semelhante ao do cache, ou seja, para armazenar dados. enquanto a diferença está no contexto de seu uso.
Os buffers são usados para armazenar dados temporariamente, enquanto os dados são movidos de um objeto para outro. EX: quando um vídeo é movido da Internet para o nosso PC, os buffers de exibição são usados para armazenar os quadros do vídeo que serão exibidos a seguir. (Isso aumenta a QoS, pois o vídeo seria executado após um processo de buffer bem-sucedido.) EX: outro exemplo é o cenário em que escrevemos dados em nossos arquivos. Os dados recém-gravados não são copiados para a memória secundária instantaneamente. As alterações feitas são armazenadas no buffer e, de acordo com a política projetada, as alterações são refletidas de volta ao arquivo na memória secundária (disco rígido).
Os caches, por outro lado, são usados entre a memória primária e os processadores, para preencher a lacuna entre a velocidade de execução da RAM e o processador. Além disso, os dados acessados com mais frequência são armazenados no cache para reduzir o acesso à RAM.
Coisa comum: ambos são componentes intermediários de armazenamento de dados (software ou hardware) entre computação e armazenamento "principal".
Para mim, a diferença é a seguinte:
Amortecedor:
Cache: