进程替换与 FIFO(由 `makefifo` 创建)

进程替换与 FIFO(由 `makefifo` 创建)

据我所知,bash 中的进程替换和 FIFO(由mkfifo)都是命名管道。它们似乎都是进程间通信的可行解决方案。我想知道如何决定何时使用哪个?谢谢。

答案1

进程替换不一定涉及命名管道;它可以/dev/fd在支持它的平台上实现。

至少对于 Linux 上的 Bash,进程替换比 FIFO 快得多。基于管道和流程替代之间的性能差异,我使用以下脚本来测试 FIFO:

mkfifo fifo
for i in {1..10000}; do
    echo foo bar > fifo &
    while read; do
    echo $REPLY > /dev/null
    done < fifo
done
rm fifo

最终的时间与链接问题中管道给出的时间类似。

对于 Zsh,性能差异并不那么显着,但它仍然存在(大约 10% 支持进程替换)。

除此之外,我认为没有太大的实际区别。您可以在(某些)GUI 中使用 FIFO,这与进程替换不同(GUI 忽略其命令行的情况除外)。您还可以创建 FIFO 并使用其一端,而无需立即连接另一端,这又与进程替换不同。

相关内容