나는 출력을 생성하는 내가 만든 프로그램과 그것을 소비하는 내가 만들지 않은(그리고 변경하고 싶지 않은) 프로그램으로 구성된 무언가를 개발 중입니다. 을 사용하여 생성된 명명된 FIFO를 사용하고 있습니다 mkpipe
. Linux FIFO 버퍼가 작기 때문에 성능 병목 현상이 발생하는 것으로 의심됩니다. (그리고 이 크기는 커널을 패치하지 않고는 변경할 수 없습니다.)
수십 메가바이트의 버퍼와 함께 사용할 수 있는 FIFO와 유사한 대안이 있습니까? 내가 만들지 않은 프로그램은 /dev/stdin
명명된 파이프(지금처럼), 실제 파일 등 파일 시스템 이름을 가질 수 있는 모든 것에서 읽을 수 있습니다 /dev/any-character-device
.
다른 대안을 사용할 수 없는 경우 타사 무료 커널 모듈을 사용해도 됩니다.
답변1
표시된 대로 명명된 파이프 처리량에는 문제가 없습니다. 따라서 작성자가 리더보다 빠르고 두 가지 모두 일정한 속도로 작동하는 경우 전체 작업은 리더만큼 느립니다.
그러나 작성자가 출력 사이에 일시 중지를 포함하여 버스트 방식으로 출력을 생성하는 경우 더 큰 버퍼가 유리합니다.
buffer(1)
입력을 버퍼링하고 일정한 속도(기본적으로 가능한 한 빠른 속도)로 전송하도록 하는 테이프 쓰기용 유틸리티( )가 있습니다 .
your-producer | buffer > fifo & your-consumer fifo
buffer
데비안 패키지 나 다음에서 직접 사용할 수 있습니다.여기.
답변2
Unix 도메인 소켓을 사용하고 setsockopt()
.