web-dev-qa-db-ja.com

STDOUT.sync = trueとはどういう意味ですか?

私はgodのソースコードを読んでいますRubyのプロセス監視フレームワークで、これを見つけましたSTDOUT.sync = true。このようなものを見たことがありません。

それが何をするか、この線のポイントは何ですか?

前もって感謝します。

23
SuperManEver

通常、putsSTDOUTにすぐには書き込みませんが、内部で文字列をバッファリングし、より大きなチャンクで出力を書き込みます。これは、IO操作が遅いためであり、通常、すべての1文字をコンソールにすぐに書き込むのを避ける方が理にかなっています。

この動作は、特定の状況で問題を引き起こします。進行状況バーを作成したいと想像してください(広範な計算の間に単一のドットを出力するループを実行します)。バッファリングを行うと、しばらくの間何も出力されず、突然複数のドットが一度に印刷される結果になる場合があります。

この動作を回避し、代わりにSTDOUTにすぐに書き込むには、STDOUTを次のように同期モードに設定します。

STDOUT.sync = true

docs から:

同期モードがtrueの場合、すべての出力はすぐに基盤となるオペレーティングシステムにフラッシュされ、内部でバッファリングされません。

40
spickermann