バッファされていないファイルI/Oを使用して大量のデータをディスクに書き込んだ結果(少なくともオペレーティングシステムレベル以上の場合)バッファされていないファイルI/Oの結果
詳細:
私はそのstdoutとstderrをキャプチャし、ファイルに書き込む、コードの別の部分を実行しますRubyスクリプトを書いています。どうやら(少なくともRubyでは)stderrはバッファリングされておらず、stdoutはバッファされています。私の場合stderr行がいくつかのstdout行の前に印刷されるため、アウト・オブ・オーダーの結果になります。
解決策は、コードのこの部分にバッファリングされていないIO(IO.sync = true
)を使用することです。しかし、スクリプトが実行しているコードは、大量のテキストをディスクに書き込むことになります。だから私は、結果がRubyバッファ(OSバッファとそれ以下のもの)を使用しないことが何であるのだろうと思っています。それが重要なのであれば、どうすれば注文問題を回避できますか?
多分私は間違った用語を使用しています。 'syswrite'を使用する必要はありません。ストリームを単にフラッシュするだけで私の問題が解決されます(リダイレクトされたstdout/stderrの順序が間違っています)。私の質問は、 'IO.sync'が' true'の間に大量のテキストをディスクに書き込むとどうなりますか? – jrdioko
バッファーがいっぱいになったらバッファーが自動的にフラッシュされることを覚えておいてください。書き込み量が頻繁にその限界に達すると、その差は軽微です。通常、バッファーは1〜2KB程度です。 – tadman