
プログラムの実行中に通常の printf を実行し、stdout をファイルにリダイレクトする場合 (例: ./a.out > log.txt 2>&1 ) fprintf を使用してドキュメントにログを記録する場合、レイテンシの観点からパフォーマンスの違いはありますか? ?
特に、私はACEロギングを使用し、現在のプログラムを実行するとioをファイルにリダイレクトします。ロガーをファイルに関連付けるのはパフォーマンスの観点から有利ですか?
答え1
「待機時間」には、「効率的な」ファイルシステムの書き込みを可能にするのに十分な出力をバッファリングするstdioシステムを含めることができることに注意する必要があります。man 3 setbuf
詳しくは参考資料をご覧ください。バッファリングはFILE *
基準ごとに行われるため、通常バッファリングさstderr
れていないものはstdout
通常バッファリングされます。そのため、例に従ってstderr
出力と出力の両方がstdout
同じファイルで指定されていると、順序が正しくありません。
FILE *
プログラムがインスタンスを開くと、すでにアクションsetbuf()
を実行したり、通常の「fflush()」呼び出しを実行していない限り、「遅延時間」を予測することはできません。
fflush()
最終的に、クラッシュが発生する前にstdoutの出力が実際にログファイルに保存されるようにクラッシュプログラムをたくさん呼び出すようになりました。安くて汚いです。