私はgod
のソースコードを読んでいますRubyのプロセス監視フレームワークで、これを見つけましたSTDOUT.sync = true
。このようなものを見たことがありません。
それが何をするか、この線のポイントは何ですか?
前もって感謝します。
通常、puts
はSTDOUT
にすぐには書き込みませんが、内部で文字列をバッファリングし、より大きなチャンクで出力を書き込みます。これは、IO操作が遅いためであり、通常、すべての1文字をコンソールにすぐに書き込むのを避ける方が理にかなっています。
この動作は、特定の状況で問題を引き起こします。進行状況バーを作成したいと想像してください(広範な計算の間に単一のドットを出力するループを実行します)。バッファリングを行うと、しばらくの間何も出力されず、突然複数のドットが一度に印刷される結果になる場合があります。
この動作を回避し、代わりにSTDOUT
にすぐに書き込むには、STDOUT
を次のように同期モードに設定します。
STDOUT.sync = true
docs から:
同期モードがtrueの場合、すべての出力はすぐに基盤となるオペレーティングシステムにフラッシュされ、内部でバッファリングされません。