为什么默认情况下不会自动刷新缓冲区?

Zai*_*aid 3 perl buffer autoflush

我最近有幸设置了$| = 1;我的Perl脚本,以帮助它更快地与管道中的另一个应用程序通话.

我很好奇为什么这不是默认设置.换句话说,如果我的缓冲区直接冲洗,我会失去什么?

Arn*_*anc 13

写入文件描述符是通过系统调用完成的,系统调用很慢.

只有在写入一定量的数据后才缓冲流并刷新它是一种节省一些系统调用的方法.

  • 和包.而磁盘写道.并且......几乎任何能够在一次超过几个字节的数据的情况下工作得更好的东西:) (6认同)

tch*_*ist 8

对它进行基准测试,你会明白的.

缓冲取决于输出句柄的设备类型:ttys是行缓冲的; 管道和插座是管道缓冲的; 磁盘是块缓冲的.

这只是基本的编程.这不是Perl的事情.