[解決済み] バッファード IO とアンバッファード IO
質問
私は、デフォルトでプログラムの I/O がバッファリングされること、つまり、要求するプログラムに一時的なストレージから提供されることを学びました。
私は、バッファリングが IO パフォーマンスを向上させる (おそらくシステム コールを減らすことによって) ことを理解しています。 バッファリングを無効にする例として、次のようなものを見たことがあります。
setvbuf
この 2 つのモードの違いは何ですか、また、いつ他よりも 1 つを使用する必要がありますか。
どのように解決するのですか?
出力が書き込まれたことを確認してから処理を続けたい場合は、バッファリングされていない出力が必要です。1 つの例は、C ランタイム ライブラリの標準エラーで、これは通常デフォルトでバッファリングされていません。エラーは(願わくば)滅多に発生しないので、その発生を即座に知りたいものです。一方、標準出力は は はバッファリングされていますが、これは単にそれを通過するデータの方がはるかに多いと想定されているからです。
もうひとつの例は、ロギング ライブラリです。ログメッセージがプロセス内のバッファに保持され、プロセスがコアダンプする場合、出力が決して書き込まれない可能性が非常に高くなります。
さらに、最小化されるのはシステムコールだけでなく、ディスクI/Oも同様に最小化されます。プログラムが一度に 1 バイトずつファイルを読み取るとします。バッファされていない入力では、おそらくブロック全体を読み込む必要があるにもかかわらず、すべてのバイトについて (比較的非常に遅い) ディスクに出力されます (ディスク ハードウェア自体にはバッファがあるかもしれませんが、それでもインメモリ アクセスよりも遅いディスク コントローラーに出力されることになります)。
バッファリングにより、ブロック全体が一度にバッファに読み込まれ、その後、個々のバイトが (メモリ内の非常に高速な) バッファ領域から配信されるのです。
バッファリングは、次の例のように、さまざまな形態をとることができることを覚えておいてください。
+-------------------+-------------------+
| Process A | Process B |
+-------------------+-------------------+
| C runtime library | C runtime library | C RTL buffers
+-------------------+-------------------+
| OS caches | Operating system buffers
+---------------------------------------+
| Disk controller hardware cache | Disk hardware buffers
+---------------------------------------+
| Disk |
+---------------------------------------+
関連
-
[解決済み] グリーンフィールド・アプリケーションとブラウンフィールド・アプリケーションとは?
-
[解決済み] Mac OS X で DYLD_LIBRARY_PATH を使ってもいいのでしょうか?また、それを使った動的ライブラリ検索アルゴリズムはどうなっていますか?
-
[解決済み】すべての再帰は反復に変換できる?
-
[解決済み] イーガーローディングとは何ですか?
-
[解決済み] 不変量とは何ですか?
-
[解決済み] プログラミングにおける "Context "という言葉?[クローズド]
-
[解決済み】10行以下の簡単なコードでできる最もクールなことは何ですか?初心者を鼓舞するのに役立つ [終了しました]
-
[解決済み] 単項のブーリアン・トグル演算子を持つ言語はありますか?
-
[解決済み] 例外やエラーコードの規約 [終了しました]。
-
[解決済み] Lambdaとは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 言語バインディングとは何ですか?
-
[解決済み】「インターフェースに合わせたプログラム」とはどういう意味ですか?
-
[解決済み】なぜソースファイルの最後に空行を入れることが推奨されるのですか?
-
[解決済み】sys.stdout.flush()メソッドの使用方法について
-
[解決済み] 不変量とは何ですか?
-
[解決済み] 2つの角度の差を求めるにはどうすればよいのでしょうか?
-
[解決済み] プログラミングにおける "Context "という言葉?[クローズド]
-
[解決済み] モノリシックカーネルとマイクロカーネルの違いは何ですか?
-
[解決済み] リンクリストはどのような場合に有効か?
-
[解決済み] メモリマップドファイルの利点は何ですか?