関数呼び出しfwrite()
を使用して、Linux のパイプにデータを書き込みます。
以前は、fwrite()
データの小さなチャンク (平均 20 バイト) に対して繰り返し呼び出されていたため、バッファリングは に任されていましたfwrite()
。プロセスの strace は、一度に 4096 バイトのデータが書き込まれていることを示しました。
この書き込みプロセスが私のプログラムのボトルネックであることが判明しました。そこで、コード内のデータを 64KB のブロックにバッファリングしてから、一度に を使用してブロック全体を書き込むことにしましたfwrite()
。以前setvbuf()
は FILE* ポインターを「バッファリングなし」に設定していました。
パフォーマンスの向上は、私が期待したほど重要ではありませんでした。
さらに重要なことに、strace
出力は、データがまだ一度に 4096 バイト書き込まれていることを示していました。誰かが私にこの振る舞いを説明してもらえますか? 64KB のデータで呼び出しfwrite()
ている場合、一度に 4096 バイトしか書き込まれないのはなぜですか?
fwrite()
FILE* ポインターを使用してパイプにデータを書き込むための代替手段はありますか?