私は出力を生成する私が作成したプログラムとそれを消費する私が作成しなかった(そして変更したくない)プログラムで構成されたものを開発しています。を使用して作成された名前付きFIFOを使用していますmkpipe
。 Linux FIFOバッファが小さいため、パフォーマンスのボトルネックが発生すると疑われます。 (そしてこのサイズはカーネルをパッチしないと変更できません。)
数十メガバイトのバッファで使用できるFIFOに似た代替手段はありますか?私が作成していないプログラムは、/dev/stdin
名前付きパイプ(今のように)、物理ファイルなどのファイルシステム名を持つことができるすべてのものから読み取ることができます/dev/any-character-device
。
他の選択肢が利用できない場合は、サードパーティの無料カーネルモジュールを使用できます。
答え1
示されているように、名前付きパイプスループットに問題はありません。したがって、作成者がリーダーよりも速く、両方が一定の速度で動作している場合、タスク全体はリーダーと同じくらい遅くなります。
しかしながら、作成者が出力間の一時停止を含むバースト方式で出力を生成する場合、より大きなバッファが有利である。
buffer(1)
入力をバッファリングし、一定の速度(デフォルトではできるだけ速い速度)で転送するテープ書き込みユーティリティ()があります。
your-producer | buffer > fifo & your-consumer fifo
buffer
Debian パッケージまたは以下から直接使用できます。ここ。
答え2
Unixドメインソケットを使用してsetsockopt()
。