我最近有幸在我的Perl脚本中设置了$| = 1;
,以帮助它通过管道更快地与另一个应用程序通信。
我很好奇为什么这不是默认设置。换句话说,如果我的缓冲区立即被刷新,我会失去什么?
通过系统调用来写入文件描述符,而系统调用是慢的。
缓冲流并在写入一定量的数据后才刷新它是一种节省系统调用的方法。
对其进行基准测试,您就会理解。
缓冲取决于输出句柄的设备类型:ttys为行缓冲;管道和套接字为管道缓冲;磁盘为块缓冲。
这只是基本编程。这不是Perl的特性。
User-Agent
这样的大型 HTTP header 行只有约 120 字节。短行可能小于 20 字节。使用典型的 MTU,超过 20 个 HTTP header 行应该很容易适合一个数据包。如果您将 HTTP header 行缓冲,则大多数网络堆栈将每行输出一个数据包。这会导致 TCP/IP 开销增加 20 倍。HTTP 是一个不应该被行缓冲的协议的完美示例,而 IRC 则是同样适合进行行缓冲的协议的完美示例。 - Ven'Tatsu