STDOUT.sync = true 是什么意思?
What STDOUT.sync = true means?
我正在阅读 god
Ruby 中的一个进程监控框架的源代码并找到了这个 STDOUT.sync = true
。我以前从未见过这样的事情。
请解释一下它的作用,这一行的意义何在?
提前致谢。
通常 puts
不会立即写入 STDOUT
,而是在内部缓冲字符串并以更大的块写入输出。这样做是因为 IO 操作很慢,通常避免将每个字符立即写入控制台更有意义。
这种行为在某些情况下会导致问题。假设您想构建一个进度条(运行 一个在大量计算之间输出单个点的循环)。使用缓冲的结果可能是一段时间没有任何输出,然后突然一次打印多个点。
要避免这种行为并立即写入 STDOUT
,您可以将 STDOUT
设置为同步模式,如下所示:
STDOUT.sync = true
来自docs:
When sync mode is true, all output is immediately flushed to the underlying operating system and is not buffered internally.
我正在阅读 god
Ruby 中的一个进程监控框架的源代码并找到了这个 STDOUT.sync = true
。我以前从未见过这样的事情。
请解释一下它的作用,这一行的意义何在?
提前致谢。
通常 puts
不会立即写入 STDOUT
,而是在内部缓冲字符串并以更大的块写入输出。这样做是因为 IO 操作很慢,通常避免将每个字符立即写入控制台更有意义。
这种行为在某些情况下会导致问题。假设您想构建一个进度条(运行 一个在大量计算之间输出单个点的循环)。使用缓冲的结果可能是一段时间没有任何输出,然后突然一次打印多个点。
要避免这种行为并立即写入 STDOUT
,您可以将 STDOUT
设置为同步模式,如下所示:
STDOUT.sync = true
来自docs:
When sync mode is true, all output is immediately flushed to the underlying operating system and is not buffered internally.