공동 프로세스를 시작하고 해당 표준 입력 및 출력을 기본 프로세스에 연결하려고 한다고 가정해 보겠습니다. 두 가지 옵션이 있습니다.
2개의 파이프를 호출
pipe(2)
하고 생성하여 각각 coprocess의 표준 입력 및 출력에 연결합니다.socketpair(2)
소켓의 끝 1을 호출 하여 coprocess의 표준 입력 및 출력에 연결합니다.
오늘날 많은 시스템이 수행하고 있는 "소켓 쌍"보다 간단한 파이프를 더 효율적으로 구현할 수 있는 것으로 알려져 있습니다. 하지만 양방향으로 작동하려면 어떻게 해야 할까요? "파이프 쌍"이 여전히 소켓 쌍보다 더 효율적인가요?
문맥
표준을 준수하는 코드를 작성하기 위해 최선을 다하고 싶기 때문에 대상 플랫폼은 "POSIX-in-general"이라고 가정합니다. 내 말은, 이 질문은 Linux, {Free,Net,Open}BSD, Solaris 11.4와 같은 일부 SVR4 자손 등을 포함하여 주요 구현에 배포된 두 가지 유형의 IPC의 일반적인 구현 기술을 비교하라는 것입니다.
또한 비용이 비싸다는 것은 단지 IO 처리량만을 의미하는 것이 아닙니다. 시스템 리소스 소비도 저의 관심사입니다.
답변1
이식성이 필요한 경우 파이프라인을 2개 이상 생성해야 합니다. 이는 소켓의 경우 1개의 열린 파일 설명과 비교하여 2개의 열린 파일 설명에 해당합니다.
성능/효율성상의 이유로는 아니지만 MSG_PEEK
파이프와 함께 사용할 수는 없지만 익명 소켓과 함께 사용할 수 있습니다 socketpair(2)
.