내가 아는 한, 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를 생성하고 다른 쪽 끝을 즉시 연결하지 않고 한쪽 끝을 사용할 수도 있습니다.