私が知る限り、bashのプロセス交換とFIFO(by)は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がコマンドラインを無視する場合を除く)(一部)GUIでFIFOを使用できます。プロセスの置き換えとは異なり、FIFO を作成し、もう一方の端をすぐに接続せずに、一方の端を使用することもできます。