ハードドライブからデータを読み取る速度はRAMからデータを読み取る速度とは非常に異なるため、キャッシュがハードドライブからデータを読み込む速度を上げるために使用されることがわかります。したがって、キャッシュミス指数は非常に重要です。
また、ハードディスクやキーボードなどの他のデバイスを読み書きするときにバッファがあることもわかります(たとえばJavaにあります)BufferedWriter
。BufferedReader
しかし、なぜバッファが必要なのかわかりません。バッファがなければどうなりますか?バッファは読み込み速度も高めるためのものですか?それでは、バッファとキャッシュの違いは何ですか?
また、キャッシュが読み込み速度を上げることがわかっていますが、キャッシュを介してRAMからハードドライブにデータを書き込む速度が速くなりますか?
ベストアンサー1
私が理解しているように、バッファは、生産者と消費者が異なる速度でデータを最適に生成または消費するときに最も便利です。
たとえば、プログラムは一度に8バイトのデータをファイルに書き込むことができます。ディスクを書き込む場合は、実際に4KiBのデータを一度に書き込むのが最適です。かなり小さいブロックの場合、ディスクへの書き込みに関連するオーバーヘッドは、ディスクが実際にデータを書き込むのにかかる時間よりも大きくなる可能性があります(したがって、512 * T_8b >> T_4KiB)。したがって、4KiBのデータチャンクを収集して同時に書き込む間にバッファを設定すると、パフォーマンスが大幅に向上します。たとえば、次を参照してください。ddはなぜそんなに時間がかかるのですか?、最も簡単な解決策は、より大きなバッファサイズを使用することです。 (もちろん、ここに示されている数字は純粋に例として説明されています。最新のディスクの実際の数字はかなり異なります。)
キャッシュはバッファリングと直交します。キャッシュとバッファリングの両方が遅いソース(ディスク、ネットワークなど)への不要な追加アクセスを防ぐためです。ただし、キャッシュは再利用のために結果を格納して重複した読み取りと書き込みを削除するように機能しますが、バッファは結果をまとめて重複した順次読み取りと書き込みを削除するように機能します。簡単なポイント:
- 同じ場所をn回読み取ると、実際に最初にディスクに到達し、残りはキャッシュから取得されます。
- 同じ位置にn回書き込むと、実際には最後の時間だけが記録されます。