gpt4 book ai didi

c - 为什么管道的容量有限?

转载 作者:行者123 更新时间:2023-12-03 18:05:28 24 4
gpt4 key购买 nike

我读过管道需要具有有限的容量。但我不明白为什么。如果进程无限制地写入管道会发生什么?

最佳答案

这是由于缓冲。管道不是“神奇的”,管道并不能确保所有进程都以锁步方式处理每个单独的字节或字符。相反,管道缓冲进程间输出,然后传递缓冲区。这个缓冲区大小限制就是你所指的。 In many Linux distros and in macOS the buffer size is 64KiB .

想象一下,有一个进程每秒向 stdout 输出 1GB 的数据——它被输送到另一个进程,该进程每分钟只能在 stdin 上处理 100 字节的数据——考虑到这些千兆字节的数据必须去某个地方。如果有一个无限大小的缓冲区,那么您会很快填满拥有管道的任何操作系统组件的内存空间,然后开始分页到磁盘 - 然后磁盘上的页面文件会填满 - 这并不好。

通过设置最大缓冲区大小,输出进程将在缓冲区填满时得到通知,并且可以自由地处理该事件,但这是适当的(例如,如果它是随机数生成器,则暂停输出,如果它是网络监视器,则丢弃数据,通过崩溃, 等等)。

关于c - 为什么管道的容量有限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59554412/

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