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

11

Está dizendo que um cache é um tipo especial de buffer correto? Ambos executam funções similares, mas há alguma diferença subjacente que eu esteja sentindo falta?

    
por Dharini Chandrasekaran 07.06.2012 / 19:22

4 respostas

10

Do artigo da Wikipedia sobre os buffers de dados :

a buffer is a region of a physical memory storage used to temporarily hold data while it is being moved from one place to another

Um buffer termina passando por todos os dados que são transmitidos 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 um cache. No entanto, o cache no sentido convencional geralmente não armazena todos os dados quando está sendo movido de um lugar para outro (ou seja, cache da CPU).

O objetivo de um cache é armazenar dados de forma transparente de modo que apenas dados suficientes sejam armazenados em cache para que os dados restantes possam ser transferidos sem qualquer penalidade de desempenho. Nesse contexto, o cache apenas "pré-busca" uma pequena quantidade de dados (dependendo das taxas de transferência, tamanhos de cache, etc ...).

A principal diferença é que um buffer eventualmente armazenará todos os dados. Por outro lado, um cache pode conter todos, alguns ou nenhum dos dados (dependendo do design). No entanto, um cache é acessado como se você estivesse acessando diretamente os dados em primeiro lugar - o que fica exatamente em cache é transparente para o "usuário" do cache.

A diferença está na interface . Quando você usa um cache para acessar uma fonte de dados, você o usa como se o cache fosse a a fonte de dados - você pode acessar cada parte da fonte de dados através do cache, e o cache determinará de onde vêm os dados (o próprio cache ou a origem). O próprio cache determina quais partes dos dados serão pré-carregadas (geralmente apenas o começo, mas às vezes todas), 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 cache da CPU , é prefetcher / readahead . Ambos carregam as partes de dados que eles acham que você usará mais na memória 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 peça já tenha sido movida para o buffer. Isso exigiria que o buffer fosse realocado (considerando 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 quando a música é lida, quando o áudio é processado, até quando é enviado para a 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).

    
por 07.06.2012 / 19:30
9

Seria mais correto dizer que um cache é um padrão de uso específico de um buffer, o 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 isso 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 que os dados são armazenados como também estão sendo usados simultaneamente, embora isso 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.

Existe, no entanto, uma grande sobreposição na implementação e no uso.

    
por 07.06.2012 / 19:27
2

Uma diferença importante entre o cache e o buffer é:

O buffer é uma 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.

O buffer também é às vezes chamado de - Cache de 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 armazenamento temporário de dados, 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 seriam exibidos em seguida. (ISTO AUMENTA A QoS, COMO O VÍDEO FUNCIONA LISTAMENTE APÓS UM SUCESSO PROCESSO DE BUFFER.) EX: outro exemplo é o cenário quando 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, em seguida, 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).

Por outro lado, os caches são usados entre a memória principal 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.

    
por 21.06.2015 / 23:17
1

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:

Buffer:

  • Lida com o acesso seqüencial aos dados (por exemplo, leitura / gravação de dados do arquivo ou soquete)
  • Ativa interface entre computação e armazenamento principal, se adapta entre si a diferentes padrões de transferência de dados de um produtor de dados e um consumidor de dados. Por exemplo. A computação grava pequenos chunks de dados, mas a unidade de disco pode aceitar apenas partes de dados de um tamanho específico. Assim, o buffer acumula pequenos pedaços como entrada e os reagrupa em partes maiores da saída.
  • Portanto, é como um padrão de design Adaptador . Ele une dois componentes interativos que não podem interoperar diretamente.
  • Exemplos: buffer de disco, BufferedReader na linguagem Java, duffering em computação gráfica.

Cache:

  • Lida com o acesso aleatório aos dados (por exemplo, o cache da CPU armazena em cache linhas de memória que não são necessárias sequencialmente).
  • O acesso Otimiza 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 um padrão de design Decorator . Ele une (frequentemente de forma transparente) dois componentes interativos que podem, em princípio, interoperar diretamente, mas torna a interação mais rápida.
  • Exemplos: cache da CPU, cache da página, proxy da web, cache do navegador.
por 02.07.2018 / 19:04

Tags