我正在阅读god
Ruby的流程监控框架的源代码,并找到了这个STDOUT.sync = true
。我以前从没见过这样的东西。
请解释它的作用,这条线的重点是什么?
提前致谢。
答案 0 :(得分:37)
通常puts
不会立即写入STDOUT
,而是在内部缓冲字符串并将输出写入更大的块。这样做是因为IO操作很慢,并且通常避免将每个字符立即写入控制台更有意义。
此行为会在某些情况下导致问题。想象一下,你想要建立一个进度条(运行一个循环,在广泛的计算之间输出单点)。通过缓冲,结果可能是一段时间内没有任何输出,然后突然多次打印出多个点。
要避免此行为,而是立即写入STDOUT
,您可以将STDOUT
设置为同步模式,如下所示:
STDOUT.sync = true
来自docs:
当sync模式为true时,所有输出立即刷新到底层操作系统,并且不在内部缓冲。