キャッシュは特別な種類のバッファであると言っていますか?どちらも同様の機能を実行しますが、欠落している根本的な違いはありますか?
キャッシュは特別な種類のバッファであると言っていますか?どちらも同様の機能を実行しますが、欠落している根本的な違いはありますか?
回答:
データバッファに関するウィキペディアの記事から:
バッファは、ある場所から別の場所に移動している間、データを一時的に保持するために使用される物理メモリストレージの領域です。
バッファを循環及び(オーディオ処理で環状バッファを使用する場合のような)別の記憶位置から送信されたデータのすべての単一片を保持してしまいます。バッファはそれだけを可能にします-データストリーム内の現在位置の前後のデータの「バッファ」。
実際、バッファとキャッシュにはいくつかの一般的な側面があります。ただし、通常の意味でのキャッシュは、場所から場所へ移動するときにすべてのデータを保存するわけではありません(CPUキャッシュなど)。
キャッシュの目的は、パフォーマンスを犠牲にすることなく残りのデータを転送できるように、十分なデータがキャッシュされるように、データを透過的に保存することです。このコンテキストでは、キャッシュは少量のデータのみを「プリフェッチ」します(転送速度、キャッシュサイズなどに依存します)。
主な違いは、バッファが最終的にすべてのデータを保持することです。逆に、キャッシュはデータのすべてを保持する場合もあれば、一部を保持する場合もあれば、まったく保持しない場合もあります(設計によって異なります)。ただし、最初にデータに直接アクセスするかのようにキャッシュにアクセスします。正確にキャッシュされるのは、キャッシュの「ユーザー」に対して透過的です。
違いはインターフェイスにあります。キャッシュを使用してデータソースにアクセスする場合、キャッシュをデータソースであるかのように使用します。キャッシュを介してデータソースのすべての部分にアクセスでき、キャッシュはデータの送信元を決定します(キャッシュ自体、またはソース)。キャッシュ自体がデータのどの部分をプリロードするかを決定します(通常は最初だけですが、時にはすべて)、使用中のキャッシュ置換アルゴリズムがキャッシュから何を/いつ削除するかを決定します。これの最良の例は、CPUキャッシュ自体は別として、プリフェッチャー / 先読みです。。どちらも、使用頻度が最も高いと思われるデータの一部をメモリに読み込み、キャッシュされていない場合はハードドライブに戻ります。
逆に、新しい部分が既にバッファに移動されていない限り、バッファを使用してデータストリーム内の位置を瞬時に移動することはできません。そのためには、バッファを再配置する必要があり(新しい場所がバッファの長さを超える場合)、事実上、新しい場所からバッファを「再起動」する必要があります。これの最良の例は、Youtubeビデオのスライダーを動かすことです。
バッファのもう1つの良い例は、Winampでオーディオを再生することです。オーディオファイルはCPUでデコードする必要があるため、曲が読み込まれてからオーディオが処理されてからサウンドカードに送信されるまでに時間がかかります。Winampはオーディオデータの一部をバッファリングするため、「ロックアップ」を回避するために十分なオーディオデータが既に処理されています(つまり、CPUは常に数百ミリ秒で聞こえるオーディオを準備しており、リアルタイムではありません;聞こえるのはバッファからであり、これはCPUが過去に準備したものです)。
キャッシュとバッファの重要な違いの1つは次のとおりです。
バッファはプライマリメモリの一部です。これらは、プライマリメモリ(RAM)から存在しアクセスされる構造です。
一方、キャッシュはコンピュータのメモリ階層内の独立した物理メモリです。
バッファーは、バッファーキャッシュとも呼ばれます。この名前は、バッファの使用がキャッシュの使用、つまりデータの保存に似ていることを強調しています。違いは使用法のコンテキストにあります。
バッファはデータを一時的に保存するために使用され、データはオブジェクト間で移動されます。例:ビデオがインターネットから当社のPCに移動されると、ディスプレイバッファは次に表示されるビデオのフレームを保存するために使用されます。(これは、成功したバッファリングプロセスの後にビデオがスムーズに実行されるため、QoSが向上します。)例:別の例は、ファイルにデータを書き込むシナリオです。新しく書き込まれたデータは、すぐにセカンダリメモリにコピーされません。行われた変更はバッファに保存され、設計されたポリシーに従って、変更はセカンダリメモリ(ハードディスク)のファイルに反映されます。
一方、キャッシュは、プライマリメモリとプロセッサの間で使用され、RAMの実行速度とプロセッサのギャップを埋めます。また、最も頻繁にアクセスされるデータはキャッシュに保存され、RAMへのアクセスを減らします。
一般的なこと:両方とも、計算ストレージと「メイン」ストレージの間の中間データストレージコンポーネント(ソフトウェアまたはハードウェア)です。
私にとっての違いは次のとおりです。
バッファ:
キャッシュ: