perl - 人们应该更喜欢无缓冲输出的可能情况是什么?

标签 perl buffering output-buffering

通过我的讨论previous question我开始知道 Perl 默认提供行缓冲区输出。

$| = 0; # for buffered output (by default)

如果你想获得无缓冲的输出,那么将特殊变量 $| 设置为 1 即

$| = 1;  # for unbuffered output

现在我想知道在什么情况下应该更喜欢无缓冲输出?

最佳答案

您想要交互式任务的无缓冲输出。我的意思是,当您希望某人或其他事物响应输出时,您不希望输出卡在某个缓冲区中。

例如,您不希望缓冲发送到 STDOUT 的用户提示。 (这就是为什么 STDOUT 在连接到终端时永远不会完全缓冲。它只是行缓冲,并且缓冲区会因尝试从 STDIN 读取而被刷新。)

例如,您希望通过管道和套接字发送的请求不会卡在某个缓冲区中,因为连接的另一端永远看不到它。


我能想到的唯一其他原因是,当发生不可恢复的错误(例如信号崩溃或死亡)时,您不希望重要数据滞留在缓冲区中。

例如,您可能希望保留一个未缓冲的日志文件,以便能够诊断严重的问题。 (这就是默认情况下不缓冲 STDERR 的原因。)

关于perl - 人们应该更喜欢无缓冲输出的可能情况是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6561074/

相关文章:

windows - 监控脚本并在崩溃时发送电子邮件

python - python中打印函数的错误?

linux - inotify + stdout 管道 - 输出在管道中丢失

PHP View ,使用模板

perl - 为什么我的输出打印在两行上?

python - 如何从文本中删除小写句子片段?

java - Android MediaPlayer.OnBufferingUpdateListener - 缓冲内容的百分比为负

php - PHP 中的输出缓冲?

PHP ob_start() 问题

mysql - Perl DBI 连接不一致