Qual é a diferença entre um cache e um buffer?

Qual é a diferença entre um cache e um buffer?

Dizer que um cache é um tipo especial de buffer está correto? Ambos executam funções semelhantes, mas há alguma diferença subjacente que estou perdendo?

Responder1

Do artigo da Wikipedia sobrebuffers de dados:

um buffer é uma região de armazenamento de memória física usada para armazenar dados temporariamente enquanto eles são movidos de um lugar para outro

Aamortecedoracaba percorrendo e armazenando cada dado que é transmitido de um local de armazenamento para outro (como quando se usa 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.

Na verdade, existem alguns aspectos comuns de um buffer e de um cache. No entanto, o cache no sentido convencional geralmente nãonãoarmazena todos os dados quando eles são movidos de um lugar para outro (ou seja, cache da CPU).

O propósito de umesconderijoé armazenar dados de forma transparente, de forma que apenas os dados suficientes sejam armazenados em cache para que os dados restantes possam ser transferidos sem qualquer penalidade de desempenho. Neste contexto, o cache apenas "pré-busca" uma pequena quantidade de dados (dependendo das taxas de transferência, tamanhos do 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 - o que exatamente é armazenado em cache é transparente para o "usuário" do cache.


A diferença está nointerface. Ao usar um cache para acessar uma fonte de dados, você o usa como se o cacheéa fonte de dados - você pode acessar todas as partes da fonte de dados por meio do cache, e o cache determinará de onde vêm os dados (o próprio cache ou a fonte). O próprio cache determina quais partes dos dados serão pré-carregadas (geralmente apenas o começo, mas às vezes todas), enquanto oalgoritmo de substituição de cacheem uso determina o que/quando as coisas são removidas do cache. O melhor exemplo disso é um sistema, além deCache da CPUem si, épré-buscador/Leia adiante. Ambos carregam na memória as partes dos dados que acham que você mais usará e revertem para o disco rígido se algo não estiver armazenado 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 parte já tenha sido movida para o buffer. Fazer isso exigiria que o buffer fosse realocado (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 o momento em que a música é lida, o momento em que o áudio é processado e o momento em que é enviado para a placa de som. O Winamp irá armazenar em buffer alguns dos dados de áudio, para que haja dados de áudio suficientes já processados ​​para evitar qualquer "travamento" (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).

Responder2

Seria mais correto dizer que um cache é um padrão de uso específico de um buffer, que implica múltiplos 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 este 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 à medida que são usados ​​simultaneamente, embora este 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.

No entanto, certamente há uma grande sobreposição tanto na implementação quanto no uso.

Responder3

Uma diferença importante entre cache e buffer é:

O buffer faz parte da memória primária. 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 de buffer. Este 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.

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 frames do vídeo que seriam exibidos a seguir. (ISSO AUMENTA A QoS, POIS O VÍDEO FUNCIONARIA SUAVEMENTE APÓS UM PROCESSO DE BUFFERING BEM SUCEDIDO.) EX: outro exemplo é o cenário quando gravamos dados em nossos arquivos. Os dados recém-gravados não são copiados instantaneamente para a memória secundária. As alterações feitas são armazenadas no buffer e então de acordo com a política projetada, as alterações são refletidas de volta para o 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 do processador. Além disso, os dados acessados ​​com mais frequência são armazenados no cache para reduzir o acesso à RAM.

Responder4

Coisa comum: ambos são componentes intermediários de armazenamento de dados (software ou hardware) entre a computação e o armazenamento “principal”.

Para mim a diferença é a seguinte:

Amortecedor:

  • Alçassequencialacesso a dados (por exemplo, leitura/gravação de dados de arquivo ou soquete)
  • Habilitainterface entre computação e armazenamento principal,se adaptaentre si os diferentes padrões de transferência de dados de um produtor de dados e de um consumidor de dados. Por exemplo, a computação grava pequenos pedaços de dados, mas a unidade de disco pode aceitar apenas pedaços de dados de um tamanho específico. Assim, o buffer acumula pequenos pedaços como entrada e os reagrupa em pedaços maiores de saída.
  • Então é como umAdaptadorpadrão de design. Ele une dois componentes interativos que não podem interoperar diretamente.
  • Exemplos: buffer de disco, BufferedReader em linguagem Java, duffering em computação gráfica.

Cache:

  • Alçasaleatórioacesso aos dados (por exemplo, o cache da CPU armazena em cache linhas de memória localizadas não necessárias sequencialmente).
  • Otimizao acesso ao armazenamento principal torna-o mais rápido. Por exemplo, o cache da CPU evita acessos à memória, tornando os comandos da CPU mais rápidos.
  • É como umDecoradorpadrão de design. Ele une (muitas vezes de forma transparente) dois componentes em interação que poderiam, em princípio, interoperar diretamente, mas torna a interação mais rápida.
  • Exemplos: cache de CPU, cache de página, proxy web, cache de navegador.

informação relacionada