什么STDOUT.sync = true意味着什么?

时间:2015-05-02 05:17:48

标签: ruby io

我正在阅读god Ruby的流程监控框架的源代码,并找到了这个STDOUT.sync = true。我以前从没见过这样的东西。

请解释它的作用,这条线的重点是什么?

提前致谢。

1 个答案:

答案 0 :(得分:37)

通常puts不会立即写入STDOUT,而是在内部缓冲字符串并将输出写入更大的块。这样做是因为IO操作很慢,并且通常避免将每个字符立即写入控制台更有意义。

此行为会在某些情况下导致问题。想象一下,你想要建立一个进度条(运行一个循环,在广泛的计算之间输出单点)。通过缓冲,结果可能是一段时间内没有任何输出,然后突然多次打印出多个点。

要避免此行为,而是立即写入STDOUT,您可以将STDOUT设置为同步模式,如下所示:

STDOUT.sync = true

来自docs

  

当sync模式为true时,所有输出立即刷新到底层操作系统,并且不在内部缓冲。