据我所知,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 并使用其一端,而无需立即连接另一端,这又与进程替换不同。