【发布时间】:2015-07-11 23:38:41
【问题描述】:
我正在阅读god Ruby 中的进程监控框架的源代码,并找到了这个STDOUT.sync = true。我以前从未见过这样的事情。
请解释一下它的作用,这条线的意义何在?
提前致谢。
【问题讨论】:
我正在阅读god Ruby 中的进程监控框架的源代码,并找到了这个STDOUT.sync = true。我以前从未见过这样的事情。
请解释一下它的作用,这条线的意义何在?
提前致谢。
【问题讨论】:
通常puts 不会立即写入STDOUT,而是在内部缓冲字符串并将输出写入更大的块。这样做是因为 IO 操作很慢,而且通常避免将每个字符都立即写入控制台更有意义。
这种行为在某些情况下会导致问题。想象一下,您想要构建一个进度条(运行一个循环,在大量计算之间输出单个点)。使用缓冲的结果可能是暂时没有任何输出,然后突然一次打印多个点。
要避免这种行为,而是立即写入STDOUT,您可以将STDOUT 设置为同步模式,如下所示:
STDOUT.sync = true
来自docs:
当同步模式为真时,所有输出都会立即刷新到底层操作系统,并且不会在内部缓冲。
【讨论】: