IO ストリーム バッファリングの基本的な概念とその意味がわかりません。チュートリアルやリンクは役に立ちます。
3 に答える
バッファリングは、データを直接 OS (つまりディスク) に送信する代わりに、メモリ (ユーザー メモリ) を使用しています。コンテキスト スイッチを保存します。
バッファリングは、入力と出力を処理するソフトウェアの基本的な部分です。ハードウェアとソフトウェアは異なる速度で実行されるため、バッファにはソフトウェア インターフェイスとハードウェア インターフェイスの間にあるデータが保持されます。
データを生成するコンポーネントは、データをバッファに入れることができ、後で、収集されたデータを次のコンポーネントに送信することによってバッファが「フラッシュ」されます。同様に、他のコンポーネントは、データの完全な部分、または効率的に処理するのに十分なデータが入力できるようになるまで、「バッファーで待機」している可能性があります。
C++ では、std::basic_filebuf
ファイル システム ファイルにバッファーを実装します。固定バイト数まで格納されるため、オペレーティング システムは常に最小のトランザクション サイズで動作し、プログラムは必要に応じて個々の文字にアクセスできます。
ウィキペディアを参照してください。
これがコンセプトです。データをハード ドライブに書き込む必要のあるアプリケーションがあるとします。0.5 秒ごとに何か (ログ ファイルの更新など) を書きたいとします。これでいいですか?いいえ、ここに理由があります。
ソフトウェアは非常に高速ですが、HDD の動作速度は制限されており、メモリやアプリケーションよりもはるかに低速です。何かを書き込むには、HDD は磁気ヘッドを特定のセクターに再配置し (おそらくディスクの回転速度を遅くする必要があります)、データを書き込み、元の場所に再配置する必要があります。そのため、アプリケーションの動作が非常に遅くなる可能性があります (もちろん、これは理論上の例です)。
バッファリングはこれに対処するのに役立ちます。毎回ディスクに書き込む代わりに、データはメモリ内のどこかにあるバッファに蓄積されています。十分な量のデータが収集されると、バッファがフラッシュされます。バッファからのデータがディスクに書き込まれます。このようなアプローチは、HDD 操作を最小限に抑え、全体的な速度を向上させるのに役立ちます。