mkfifo-디스크 I / O가 실제로 발생합니까?


10

두 가지 응용 프로그램이 있습니다.

  • 프로듀서 (N 개의 인스턴스)
  • 소비자 (1 인스턴스)

나는 현재 생산자로부터 중간 결과를 쓰고 소비자는 디스크에서 이러한 파일을 읽고 최종 결과를 생성합니다 .

생산자의 출력을 소비자에게 직접 "스트리밍"하여이 I / O를 최소화하고 싶습니다.

내가 명명 된 파이프 (에서는 mkfifo) 및 후속 예를 건너 왔어요 여기 . 이것은 훌륭해 보이지만 실제로 확인할 수없는 것은 무엇입니까? FIFO 대기열이 파일을 통해 버퍼링됩니까? 그렇다면 아마 도움이되지 않을 것입니다. 디스크를 사용하지 않고 내용이 "메모리를 통해"스트리밍되도록하고 싶습니다. 아마도 이것이 프로세스 전체에서 가능하지 않습니까?

답변:


10

디스크 입출력이 없습니다 (파일 시스템을 탐색하여 fifo 파일을 열 때 제외).

에서 (7) 매뉴얼 페이지 FIFO 리눅스 :

FIFO 특수 파일 (명명 된 파이프)은 파일 시스템의 일부로 액세스된다는 점을 제외하면 파이프와 유사합니다. [...] 프로세스가 FIFO를 통해 데이터를 교환 할 때 커널은 모든 데이터를 파일 시스템에 쓰지 않고 내부적으로 전달합니다. 따라서 FIFO 특수 파일에는 파일 시스템에 내용이 없습니다. 파일 시스템 항목은 프로세스가 파일 시스템의 이름을 사용하여 파이프에 액세스 할 수 있도록 단지 참조 점 역할을합니다.


완전한. mkfifo에 대한 매뉴얼 페이지를 읽었지만 "fifo"에 대한 페이지를 찾지는 못했습니다. 감사합니다!
Jmoney38

3

사용 가능한 메모리가 충분하면 캐시되고 실제 디스크 IO가 수행되지 않기 때문에 결과가 실제로 디스크로 백업되는지 여부는 중요하지 않습니다. 반대로 메모리가 지원되고 사용 가능한 메모리가 충분하지 않으면 디스크로 스왑 될 수 있습니다.

내가 추측한다면 파이프가 실제로 메모리 기반이라고 말하지만 대기중인 데이터를 재부팅 할 때만 보존해야합니다.

주의해야 할 것은 여러 생산자가 있으므로 쓰기가 대기열에 인터리브되지 않도록 원자 적이어야합니다. man 7 pipe쓰기가 원 자성인지 확인하는 방법에 대한 자세한 내용 을 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.