Substituição de processo vs FIFO (criada por 'makefifo')

0

Tanto quanto eu sei, a substituição de processo em bash e FIFO (criada por mkfifo ) são ambos pipes nomeados. Ambos parecem soluções viáveis para comunicação entre processos. Eu queria saber como decidir quando usar qual? Obrigado.

    
por Tim 26.03.2018 / 04:22

1 resposta

2

A substituição do processo não envolve necessariamente pipes nomeados; ele pode ser implementado usando /dev/fd em plataformas que suportam isso.

Pelo menos com o Bash no Linux, a substituição de processos é significativamente mais rápida que os FIFOs. Com base nas diferenças de desempenho entre pipelines e substituição de processos , usei o seguinte script para testar FIFOs:

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

e terminou com tempos semelhantes aos dados para pipes na pergunta vinculada.

Com Zsh, a diferença de desempenho não é tão dramática, mas ainda está presente (aproximadamente 10% a favor da substituição do processo).

Além disso, não acho que haja muita diferença prática. Você pode usar FIFOs em (algumas) GUIs, ao contrário da substituição de processos (exceto nos casos em que a GUI ignora sua linha de comando). Você também pode criar um FIFO e usar uma de suas extremidades sem conectar imediatamente a outra extremidade, novamente ao contrário da substituição do processo.

    
por 26.03.2018 / 06:05