2つのコマンドの間に大きなバッファをパイプに追加する

フォームのbashコマンドラインが与えられた

commandA | commandB

私は、 commandA commandB の間に1MBのサイズのバッファを追加したいと考えています。 私はこれをフォームの何かで行うことができると期待しています

commandA | BUFFER | commandB

BUFFER に使用するコマンドは何ですか?

備考:2つのコマンドをデカップリングしてより並列化しやすくするために、これを実行したいと思います。問題は、 commandB が大きなチャンクでデータを処理することです。これは現在、 commandB がチャンクで完了するまで commandA だからすべてが順番に実行されます:-(

20

4 答え

BUFFERはバッファと呼ばれます。 (man 1バッファ、おそらくapt-getインストールバッファの後ろ)

19
追加された
バッファに渡すべきオプションは何ですか? 1Gbのバッファサイズ?チャンクのサイズ、チャンクの数などを設定するオプションはたくさんあるようですが、特定のサイズの単純なバッファを取得するためにどのクラスを使用するかはわかりません。
追加された 著者 Georges Dupéron,
-m size は合計です。細かい制御が必要な場合は、 -s blocksize -b blocks を一緒に使用してください。
追加された 著者 Eugen Rieck,
冷たい、私は分かりませんでした。+1 ;-)
追加された 著者 Michael Krelin - hacker,

別のツール、 pv - パイプビューア:

process1 | pv -pterbTCB 1G | process2
  • B specifies the buffer size, here 1 Gigibyte
  • C disables splice, which is required for B
  • T shows the buffer level
  • pterb are the default display switches needed due to the presence of T

pv might be available on systems where mbuffer/buffer is not in the official repositories (such as arch linux).

8
追加された

あなたは使うことができます

  • バッファ(記載済み)
  • mbuffer(solarisでも動作しますが、他のUNIXでも可能です)

例えば。

    process1 | mbuffer -m 1024M | process2

1Gバッファを使用する

5
追加された
バッファは(マンページと私の実験によると)1GBに制限されているので、mbufferはバッファよりはるかに優れているようです。
追加された 著者 phihag,

代わりに、名前付きパイプを使用して並列に実行することもできます。

mkfifo myfifo
commandB < myfifo &
commandA > myfifo
rm myfifo
0
追加された
それは約64KBのみをバッファリングします。
追加された 著者 Volker Siegel,
このソリューションは、 commandA |と同じバッファサイズを持ちます。 commandB
追加された 著者 mik,