2010-12-02 7 views
0

私はPHP開発者だけでなく、cpp開発者です。私は疑問に思っていた:私はcppのバイナリを作成し、私はそれをPHP上で実行します。私のプロセスはより速く動くでしょうか?例えばPHP上でcppバイナリを実行すると、コードが高速化する可能性がありますか?

私は千個の配列の要素を比較し、それらのそれぞれの処理を実行する必要があり、いくつかのケースでは、私は(再帰的に)何度も何度もそれを実行する必要がありました。はい、うんざりですが、うまくいきます!

+0

'exec'などで外部実行ファイルを呼び出していますか?これは、異なる言語で書かれた機能を統合するための厄介な方法の1つです。とにかく、このコードのパフォーマンス上の問題は、言語実装の未加工のパフォーマンスから来ていません。それらは完全にバットシットの狂気のアルゴリズム(少なくとも1つのように思えます)から来ています...この頭痛よりもスピードアップが向上する可能性があります。 ! – delnan

+0

C++でモジュールをコーディングし、それを任意のPHPモジュールのように組み込むことはできますが、それは簡単な作業ではありません。 (また、私は実際にどこを見て、私はそれが可能であることを知っているので、答えの代わりにコメント) – cambraca

+0

@cambraca - 私はほとんどのPHPモジュールは、C++ではなくC言語でコーディングされていると思います –

答えて

2
  1. はい、これはもっと速いかもしれません。 (IPCではコーナーケースがたくさんありますが)それは非常に難しいことです。
  2. パフォーマンスのために絶対に必要な場合を除き、これを試してはいけません。まず、PHPでアルゴリズムを改善しようとします。
  3. 違いを測定するまでは、C++コードを本番環境で使用しないでください.C++ソリューションはかなり高速です。
  4. バイナリを実行しないで、ライブラリとlink it into the PHP interpreterを書き込まないでください。 PHPはC言語で実装されているので、extern "C"を使用してC++関数をC言語にエクスポートします。
1

私は決してPHPでそれをしませんでしたが、私はそれがパフォーマンスを圧迫する良い方法の地獄であることをあなたに伝えることができます。しかし、それをやり過ごしてはいけません:ちょうどあなたがを知っているのは、がボトルネックであることを知っていなければ、モンスターを作成するだけです。

1

コードを最初にプロファイルして、実際にボトルネックを確認してください。現在動作している場合は、XDebugをコードに組み込むことで、そのパフォーマンスを測定して関数呼び出しをプロファイリングできるようにする必要があります。多分あなたの関数呼び出しがボトルネックではない場合、あなたのすべての作業は無駄になるでしょう。

その後、言語を切り替える前にアーキテクチャ上の問題がないかどうかを確認してください。スケーラビリティに問題がある場合は、より高速な言語に切り替えるだけで問題が遅れます。