gpt4 book ai didi

perl - 与管道连通时,是否需要使用 AUTOFLUSH?

转载 作者:行者123 更新时间:2023-12-02 08:09:19 25 4
gpt4 key购买 nike

这有成为一个过于宽泛/主观的问题的风险,所以我会尽量使其尽可能具体。

我目前正在学习如何正确使用管道。通常在我审查过的代码中,在使用 pipe(my $pipe_reader, my $pipe_writer); 创建管道后,有人会调用 $pipe_writer->autoflush(1);

这不是使用“每当您使用管道时”的要求,对吗?当您想确保读者在编写者写入数据后立即获得数据时,您会使用它吗?

最佳答案

正确。如果你不打开自动刷新,一切都会正常工作,除了写入缓冲区只有在它填满时才会被刷新,或者当你关闭管道时,而不是在每次写入时立即刷新。如果您通过管道发送大量数据,那么您可以将其关闭;如果你正在做任何“互动”的事情,那么你可能想要它。

特别是,如果你正在写一个子进程读,缓冲很容易导致死锁情况,如下:你向子进程发送一个请求,并且然后从中读取响应。没有缓冲,这工作正常。但是有了缓冲, child 看不到请求,因为它仍在您的输出缓冲区中等待,所以它不会产生响应,因此您的读取永远不会解除阻塞,并且什么也不会发生。在切换到读取之前启用自动刷新,或在每次完成请求后进行手动刷新,可避免此问题。

您也可以通过使用syswrite 来避免输出缓冲,但不要混合使用syswriteprint;由于 syswrite 绕过 print 的缓冲区,您最终可能会以与预期不同的顺序输出!

关于perl - 与管道连通时,是否需要使用 AUTOFLUSH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48591415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com