ruby STDOUT.sync = true是什么意思?

pgpifvop  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(102)

我正在阅读god的源代码,这是一个Ruby中的进程监控框架,我发现了这个STDOUT.sync = true。我从没见过这样的事。
请解释它的作用,这条线的意义是什么?
先谢了。

e3bfsja2

e3bfsja21#

通常情况下,puts不会立即写入STDOUT,而是在内部缓冲字符串并以更大的块写入输出。这样做是因为IO操作很慢,通常避免将每个字符立即写入控制台更有意义。
这种行为在某些情况下会导致问题。假设您想要构建一个进度条(运行一个循环,在大量计算之间输出单个点)。使用缓冲,结果可能是一段时间没有任何输出,然后突然一次打印多个点。
要避免这种行为,而是立即写入STDOUT,您可以将STDOUT设置为同步模式,如下所示:

STDOUT.sync = true

字符串
从文档:
当sync mode为true时,所有输出将立即刷新到底层操作系统,而不会在内部进行缓冲。

相关问题