読み書き速度を分離するためにパイプラインに接続できるユーティリティはありますか?
$ 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] [ <=> ]
この目的のために、2つの追加のツールが実装された。緩衝管そして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] [ <=> ]