キャッシュとバッファの違いは何ですか?


回答:


11

データバッファに関するウィキペディアの記事から:

バッファは、ある場所から別の場所に移動している間、データを一時的に保持するために使用される物理メモリストレージの領域です。

バッファを循環及び(オーディオ処理で環状バッファを使用する場合のような)別の記憶位置から送信されたデータのすべての単一片を保持してしまいます。バッファはそれだけを可能にします-データストリーム内の現在位置の前後のデータの「バッファ」。

実際、バッファとキャッシュにはいくつかの一般的な側面があります。ただし、通常の意味でのキャッシュは、場所から場所へ移動するときにすべてのデータを保存するわけではありませ(CPUキャッシュなど)。

キャッシュの目的は、パフォーマンスを犠牲にすることなく残りのデータを転送できるように、十分なデータがキャッシュされるように、データを透過的に保存することです。このコンテキストでは、キャッシュは少量のデータのみを「プリフェッチ」します(転送速度、キャッシュサイズなどに依存します)。

主な違いは、バッファが最終的にすべてのデータを保持することです。逆に、キャッシュはデータのすべてを保持する場合もあれば、一部を保持する場合もあれば、まったく保持しない場合もあります(設計によって異なります)。ただし、最初にデータに直接アクセスするかのようにキャッシュにアクセスします。正確にキャッシュされるのは、キャッシュの「ユーザー」に対して透過的です。


違いはインターフェイスにあります。キャッシュを使用してデータソースにアクセスする場合、キャッシュをデータソースであるかのように使用します。キャッシュを介してデータソースのすべての部分にアクセスでき、キャッシュデータの送信元を決定します(キャッシュ自体、またはソース)。キャッシュ自体がデータのどの部分をプリロードするかを決定します(通常は最初だけですが、時にはすべて)、使用中のキャッシュ置換アルゴリズムがキャッシュから何を/いつ削除するかを決定します。これの最良の例は、CPUキャッシュ自体は別として、プリフェッチャー / 先読みです。。どちらも、使用頻度が最も高いと思われるデータの一部をメモリに読み込み、キャッシュされていない場合はハードドライブに戻ります。

逆に、新しい部分が既にバッファに移動されていない限り、バッファを使用してデータストリーム内の位置を瞬時に移動することはできません。そのためには、バッファを再配置する必要があり(新しい場所がバッファの長さを超える場合)、事実上、新しい場所からバッファを「再起動」する必要があります。これの最良の例は、Youtubeビデオのスライダーを動かすことです。

バッファのもう1つの良い例は、Winampでオーディオを再生することです。オーディオファイルはCPUでデコードする必要があるため、曲が読み込まれてからオーディオが処理されてからサウンドカードに送信されるまでに時間がかかります。Winampはオーディオデータの一部をバッファリングするため、「ロックアップ」を回避するために十分なオーディオデータが既に処理されています(つまり、CPUは常に数百ミリ秒で聞こえるオーディオを準備しており、リアルタイムではありません;聞こえるのはバッファからであり、これはCPUが過去に準備したものです)。


Youtubeの例では、ビデオが完全にバッファリングされている場合、つまりデバイスにダウンロードされている場合、単にキャッシュされ、ページを更新するか再読み込みしない限り、スライドを移動するたびに新しい場所を探す必要はありませんビデオ。それは正しいでしょうか?
PeanutsMonkey

@PeanutsMonkeyが正しい場合、Youtubeの動画はブラウザのキャッシュに直接ダウンロードされます。この場合のバッファーは、キャッシュに現在あるものを常に表示しているため、単に高レベルの用語です。ビデオがバッファリングされると、キャッシュに移動します(物理的に同じ場所を共有します)。オーディオプレーヤーのコンテキストで、バッファーの別の例で回答を更新しました。
ブレークスルー

2
tl; drバージョン:可能な限り迅速にデータを取得したい場合、それはバッファです。データを可能な限り長く保持したい場合、それはキャッシュです。
デビッドシュワルツ

10

キャッシュはバッファの特定の使用パターンであり、同じデータを複数回使用することを意味すると言う方が正確です。「バッファ」のほとんどの使用は、1回の使用後にデータが排出または破棄されることを意味します(必ずしもそうではありませんが)が、「キャッシュ」はデータが複数回再利用されることを意味します。キャッシュは、データが同時に使用されているときに保存されることもしばしば意味しますが、必ずしもそうではありませんが(プリフェッチなど)、バッファリングはデータが後で使用するために保存されていることを意味します。

ただし、実装と使用の両方に大きな重複があります。


3

キャッシュとバッファの重要な違いの1つは次のとおりです。

バッファはプライマリメモリの一部です。これらは、プライマリメモリ(RAM)から存在しアクセスされる構造です。

一方、キャッシュはコンピュータのメモリ階層内の独立した物理メモリです。

バッファーは、バッファーキャッシュとも呼ばれます。この名前は、バッファの使用がキャッシュの使用、つまりデータの保存に似ていることを強調しています。違いは使用法のコンテキストにあります。

バッファはデータを一時的に保存するために使用され、データはオブジェクト間で移動されます。例:ビデオがインターネットから当社のPCに移動されると、ディスプレイバッファは次に表示されるビデオのフレームを保存するために使用されます。(これは、成功したバッファリングプロセスの後にビデオがスムーズに実行されるため、QoSが向上します。)例:別の例は、ファイルにデータを書き込むシナリオです。新しく書き込まれたデータは、すぐにセカンダリメモリにコピーされません。行われた変更はバッファに保存され、設計されたポリシーに従って、変更はセカンダリメモリ(ハードディスク)のファイルに反映されます。

一方、キャッシュは、プライマリメモリとプロセッサの間で使用され、RAMの実行速度とプロセッサのギャップを埋めます。また、最も頻繁にアクセスされるデータはキャッシュに保存され、RAMへのアクセスを減らします。


-1「キャッシュは別の物理メモリです」<---いいえ。必ずしも必要ではありません。IEの店は、RAMにHDDと疑い負荷それにキャッシュするstackoverflow.com/questions/854412/... 私はCコードをキャッシュとして知られている物理メモリにロードするように指定することができるとは思いません。そのキャッシュに入れられるものは、より低レベルのものであり、おそらくOSのみが指定できます。ただし、RAM内にある場合でも、キャッシュと呼ばれます。また、Webサーバーsquidはキャッシュを設定できます。キャッシュをすべて物理キャッシュメモリに格納する必要があると考える必要はありません。
barlop

キャッシングが機能である、それは特別なメモリである必要はありません
barlop

1

一般的なこと:両方とも、計算ストレージと「メイン」ストレージの間の中間データストレージコンポーネント(ソフトウェアまたはハードウェア)です。

私にとっての違いは次のとおりです。

バッファ:

  • ハンドルシーケンシャルデータへのアクセス(例えば読み取り/ファイルやソケットからのデータの書き込み)
  • 計算と主記憶装置間のインターフェイスを有効にし、データプロデューサーとデータコンシューマーの異なるデータ転送パターンを相互に適合させます。たとえば、計算は小さなデータの塊を書き込みますが、ディスクドライブは特定のサイズのデータ​​のみを受け入れます。そのため、バッファは入力として小さな断片を蓄積し、出力の大きな断片に再グループ化します。
  • したがって、これはアダプタの設計パターンのようなものです。直接相互運用できない相互作用する2つのコンポーネントを結合します。
  • 例:ディスクバッファー、Java言語のBufferedReader、コンピューターグラフィックスのダファリング。

キャッシュ:

  • ハンドルランダムデータへのアクセス(例えばCPUキャッシュのキャッシュ以外の必要な順番に位置することをmememoryのライン)。
  • 主記憶装置へのアクセスを最適化し、高速化します。たとえば、CPUキャッシュはメモリへのアクセスを回避し、CPUコマンドを高速化します。
  • これは、デコレータのデザインパターンのようなものです。原則として直接相互運用できる相互作用する2つのコンポーネントを(多くの場合透過的に)結合しますが、相互作用を高速化します。
  • 例:CPUキャッシュ、ページキャッシュ、Webプロキシ、ブラウザーキャッシュ。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.