0

次のようにコマンドラインで呼び出されるCで記述されたこの外部アプリケーションがあります。

 app [options] <metadata file> < <input file> > <output file>

メタデータは基本的にテキスト文字列であり、入力および出力データは基本的に表形式のテキストです。

このアプリケーションを Ruby からタイトなループで実行したいと考えています。これを最も効率的に行うにはどうすればよいですか?入力データと出力データをメモリに保持したいのですが、ディスク IO のオーバーヘッドを避けるために、ループするたびにメタデータをディスクに書き込むのを避けたいのですが、これは popen/popen3 ソリューションと競合しているようです。

4

1 に答える 1

1

C コードにアクセスできる場合は、STDIN から入力を取得し、必要なメタデータと入力を収集できるように JSON 文字列を渡すように再配線するのは簡単です。出力は、現在の形式のままにすることも、必要に応じて JSON にすることもできます。

コードにアクセスできない場合は、そのアプリの制約内で作業する必要があります。つまり、ディスクから読み取る必要があります。入力ファイルと出力ファイル用のパイプまたは Unix ソケットを使用してアプリをだますことを試みることもできますが、一時的なバッファーまたはキャッシュとして途中でディスクにヒットする可能性が高いと思います。

最善の策は、superuser.com で、アプリをだまして非ディスク ファイルから入力データとメタデータを読み取らせる方法を尋ねることだと思います。


もう 1 つの考えは、C アプリのコードがあれば、Ruby と C コードから memcached ストアへの読み取り/書き込みができ、非常に高速な I/O が得られるということです。

于 2012-12-11T20:04:32.807 に答える