サブモジュールを何千万回も呼び出す perl コードを書いています。サブモジュールは計算集約的であり、その実行時間は非常に遅いです。サブモジュールとまったく同じことを行う C++ プログラムを見つけたので、サブモジュールを C++ プログラムに置き換えたいと思います。プログラムに接続するために XS コードを作成する必要があるかどうか疑問に思っています。perlコードで「system」コマンドを使用してC++プログラムを直接呼び出すと、パフォーマンスが大幅に低下しますか? ありがとう!
1 に答える
1
外部プログラムの起動は、関数呼び出しよりも常に遅くなります。速度を重視するなら、「何千万回も」プログラムを起動するのは論外です。
数千万回実行されるループが外部プログラム内にある場合は、一度だけ起動しても問題ない場合があります。しかし、ここで別の問題があります。何千万ものデータを外部プログラムに取得する方法と、結果を戻す方法です。これは外部プログラムであるため、データをテキスト形式で渡す必要があります。これは、スクリプトがデータをテキストに変換し、それを外部プログラムに渡す必要があることを意味します。外部プログラムは、それを解析してネイティブ表現に変換し、計算を実行し、結果をテキストに変換して返す必要があります。次に、スクリプトは結果を解析する必要があります。
system
とにかく、これにはおそらく適切なツールではありません。rm -rf /
出力ではなく、その効果 (例: ) のためにプログラムを実行するのに最適です。プログラムの出力を読みたい場合は、おそらくバッククォート (``
別名qx{}
) または自分自身へのパイプ (「open()
IPC の使用」を参照perldoc perlipc
) が必要です。
于 2015-02-03T08:43:05.227 に答える