【问题标题】:What STDOUT.sync = true means?STDOUT.sync = true 是什么意思?
【发布时间】:2015-07-11 23:38:41
【问题描述】:

我正在阅读god Ruby 中的进程监控框架的源代码,并找到了这个STDOUT.sync = true。我以前从未见过这样的事情。

请解释一下它的作用,这条线的意义何在?

提前致谢。

【问题讨论】:

    标签: ruby io


    【解决方案1】:

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

    这种行为在某些情况下会导致问题。想象一下,您想要构建一个进度条(运行一个循环,在大量计算之间输出单个点)。使用缓冲的结果可能是暂时没有任何输出,然后突然一次打印多个点。

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

    STDOUT.sync = true
    

    来自docs

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

    【讨论】:

    • 你带点的例子让我想起了进度条。
    猜你喜欢
    • 2016-08-19
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 2011-04-14
    • 2020-02-15
    相关资源
    最近更新 更多