HHVM とは何ですか?
2008 年、Facebook は、Web サーバー上でコンパイルして実行できるように、PHP スクリプトを C++ に変換するツールを開発する取り組みを開始しました。目標はサーバー リソースを節約することであり、Facebook のユーザー ベースが急速に拡大しているため、これは重要な目標です。この意味では、サーバーが以前の 5 ~ 6 倍のリクエスト量を処理できるようになったので、このプロジェクトは成功しました。
2010 年に遡ると、Facebook のサーバー要件が大幅に増加しており、効率を向上させるために新しいイノベーションの使用を検討する時期でした。このニーズに基づいて、Facebook は HHVM を開発しました。
HHVM は、ジャストインタイム (JIT) コンパイルを使用して、PHP コードをある種のバイトコードに変換します。次に、バイトコードがマシンコードに変換され、可能な限り高速に実行されるように最適化されます。
PHP 7 とは何ですか?
PHP 7 は、HHVM に対する PHP コミュニティの対応です。 PHP 7 によってリリースされたプレビュー バージョンは、以前の PHP 5 に比べてパフォーマンスが 100% 向上したと主張しています。
PHP のバージョンが PHP5 から PHP7 に直接移行したのではないかと疑問に思われるかもしれませんが、その答えは次のとおりです。PHP6 の開発は 2005 年に開始されましたが、その進歩は遅すぎて多くの問題が発生したため、PHP6 はまだ正式にリリースされていません。 . 以前のバージョンは評判が悪かったです。そこで、PHP コミュニティは、この言語の新しいバージョンを直接 PHP7 と名付けることにしました。
本当の問題は PHP5 と PHP7 の比較ではありません。PHP7 の方がパフォーマンスが速いことはすでに明らかだからです。ただし、比較したいのは PHP7 と HHVM です。多くの専門家がこれら 2 つの方法をそれぞれ使用して PHP コードを処理し、いくつかの興味深い結論を明らかにしました。
HHVM キャッシュにはバイトコードがあります (hhbc はヒップホップ バイトコードです)。PHP7 のパフォーマンス向上は、より優れたメモリ構造の使用にあります。スタック上の zval のメモリ割り当ては、PHP5 のヒープ上の割り当てを置き換えます。zval を直接操作すると、PHP5 の (セカンダリ) ポインタ操作が置き換えられ、WordPress を実行するために PHP7 が使用する CPU 命令の数が約 1/4 になります。 PHP5 は計算負荷が高く、bench.php の CPU 命令数も半分以下に削減できます。 HHVM は単一プロセスのサービスです。複数のスレッドを含む PHP-FPM には 1 つのメイン プロセスと複数のワーカー プロセスがあるわけではありません (Nginx にもこのプロセス モデルがあります)。つまり、HHVM はスレッドの問題によりクラッシュまたは停止した場合に自動的に回復できませんが、メイン プロセスはPHP-FPM はワーカー プロセスを再起動できます。HHVM への変換時に発生した問題: クラッシュ/メモリ リーク/互換性/デッドロック/パフォーマンス (JIT ウォームアップ/JIT がトリガーされない)。 11/04/hhvm-in-baidu/