파이프에 무제한 데이터를 버퍼링하는 유틸리티?

파이프에 무제한 데이터를 버퍼링하는 유틸리티?

읽기 및 쓰기 속도를 분리하기 위해 파이프라인에 연결할 수 있는 유틸리티가 있습니까?

$ producer | buf | consumer

buf기본적으로 저는 가능한 한 빨리 입력을 읽고 이를 메모리에 저장하여 consumer최대한 빠르게 실행하면서 즐거운 시간을 보낼 수 있는 유틸리티를 원합니다 .producer

답변1

이것pv(파이프라인 뷰어) 유틸리티는 -B진행 보고서 제공을 포함하여 이 작업(옵션 사용) 등을 수행할 수 있습니다.

답변2

당신은 그것을 사용할 수 있습니다 dd:

producer | dd obs=64K | consumer

모든 UNIX에서 사용할 수 있습니다.

답변3

보세요완충기. 메모리 또는 메모리 매핑된 파일( -t/ -T)에 버퍼링될 수 있습니다.

답변4

비표준 이동: 소켓 버퍼를 사용합니다.

예:

# echo 2000000000 > /proc/sys/net/core/wmem_max
$ socat -u system:'pv -c -N i /dev/zero',sndbuf=1000000000 - | pv -L 100k -c -N o > /dev/null
        i:  468MB 0:00:16 [ 129kB/s] [  <=>                        ]
        o: 1.56MB 0:00:16 [ 101kB/s] [       <=>                   ]

이 목적을 위해 두 가지 추가 도구가 구현되었습니다.완충관그리고opentounixsocket 매핑

$ ./buffered_pipeline ! pv -i 10 -c -N 1 /dev/zero ! $((20*1000*1000)) ! pv -i 10 -L 100k -c -N 2 ! > /dev/zero
        1: 13.4MB 0:00:40 [ 103kB/s] [         <=>      ]
        2: 3.91MB 0:00:40 [ 100kB/s] [         <=>      ]

관련 정보