ホームページ >バックエンド開発 >PHP7 >PHP7のパフォーマンスを2倍にする鍵が明らかに

PHP7のパフォーマンスを2倍にする鍵が明らかに

coldplay.xixi
coldplay.xixi転載
2020-06-24 17:31:582513ブラウズ

PHP7のパフォーマンスを2倍にする鍵が明らかに

過去 20 年間に多くの改訂と数え切れないほどの最適化を経てきた成熟した言語にとって、パフォーマンスを 2 倍にするブレークスルーを実現するのは簡単ではありません。多くの言語では、プロジェクトに改善の余地がたくさんあることがよくありますが、新しいバージョンの PHP では、一部のプログラムを変更するだけではそのような結果は得られません。

20年の歴史を持つベテランWebプログラミング言語PHPが、早ければ10月末にも新バージョンPHP 7をリリースします。これは10年ぶりのメジャーリビジョンです。最大の特徴は大きなブレークスルーです。 PHP 5 は 2 倍高速で、PHP の父である Rasmus Lerdorf 氏は、HHVM 仮想マシン上の PHP プログラムよりも高速に実行できるとさえ述べています。


過去 20 年間にわたって多くの改訂と数え切れないほどの最適化を経て完成した言語でも、パフォーマンスを 2 倍にするブレークスルーを実現できる可能性があります。 Rasmus Lerdorf 氏は、「これは簡単な作業ではありません。改善の余地が容易に見つかる他の新しいプロジェクトとは異なり、PHP の新しいバージョンは、一部のプログラムを変更することでそのような結果を達成するものではありません」と率直に述べました。逆にPHP 7は細かな最適化と性能の蓄積を重ねた結果、HHVMと比べても遜色ない実行性能を持っています。

Rasmus Lerdorf と PHP コア貢献チームは、プログラムの実行時に移動されるメモリ ビット数を削減するために多大な努力を費やし、それによって実行パフォーマンスを高速化しました。例えば、PHP の変数を格納するデータ構造 zval は 24 ビットから 16 ビットに、Hashtable は 72 ビットから 56 ビットに削減され、PHP の機能が見直され、性能向上の余地がないか検討されます。

Rasmus Lerdorf は、メモリ使用量の削減に加えて、CPU のキャッシュ ラインの動作原理も調査して、プログラム コードが CPU とどのように相互作用するか、コンパイラが新しい CPU アーキテクチャの下でプログラム コードをコンパイルする方法を理解しました。 PHP 7 のプログラム コードが最新の CPU のアーキテクチャに準拠していることを確認するためのその他の詳細。各プロジェクトの最適化によるパフォーマンスへの寄与は 0.5% 未満ですが、最適化プロジェクトの数が多かったり、特定の改善された関数がアプリケーションによって繰り返し呼び出されたりするため、修正の全体的な効果はこれほど大きな進歩をもたらす可能性があります。

HHVM に触発されて、パフォーマンスと機能性の両方を備えた PHP を構築することにしました

PHP の動作を最適化するために、Facebook は JIT コンパイルを使用して仮想マシン HHVM を作成しました。 HHVM は高速な実行パフォーマンスを備えていますが、特定の目的に最適化された設計は少数の開発者しか満足できません。それどころか、Rasmus Lerdorf 氏は、PHP のパフォーマンスを向上させるだけでなく、ハイエンド ユーザーとアマチュア ユーザーのニーズにも同時に応えたいと考えており、PHP 7 をパフォーマンスと一般的な機能の両方を備えたプログラミング言語にしたいと考えています。

ただし、市場の少数の人々のニーズを満たすプログラミング言語を開発することは難しくありませんが、PHP プロジェクトは多くのターゲットを対象としており、アマチュア ユーザーとプロのユーザーのニーズを満たす必要があります。 「すべての開発者を同時に開発するのは難しい。ニーズに応えられないグループが常に存在するからである。それは、広い範囲に水道管を噴射するようなものだ。全員の服は少し濡れるだろうが、誰の服も濡れない」完全にずぶ濡れになります」とラスムス・レルドルフ氏は語った。

外部フレームワークを使用しない場合の PHP の計算パフォーマンスは非常に優れていますが、外部フレームワークの影響により、本来は数秒で数千の Web ページ リクエストを処理できる PHP のパフォーマンスが大幅に低下し、数十の Web ページしか処理できません。必須。 Rasmus Lerdorf 氏は、HHVM が登場する前、ユーザーは PHP のパフォーマンス要件よりも、PHP が Web 開発の困難さを軽減できるかどうかに関心があり、これらのフレームワークによって開発者の作業が容易になると述べました。しかし、Facebook が HHVM を発表した後、PHP のパフォーマンスを重視する多くのユーザーを魅了したため、Rasmus Lerdorf 氏は、多くのユーザーがパフォーマンスを必要としていることに気づきました。彼は、HHVM の JIT アーキテクチャを PHP と統合する方法について考え始めました。

しかし、Rasmus Lerdorf 氏は、PHP と HHVM はアーキテクチャ設計においてまったく異なり、たとえば、HHVM のマルチスレッド アーキテクチャはあまり安定していないと述べました。また、HHVM は移植性が良くなく、Windows プラットフォームで動作させるにはまだまだ遠いのですが、PHP は Windows 環境で開発している開発者が多く、HHVM はそれらのユーザーをケアすることができません。

Rasmus Lerdorf 氏は、PHP の主要なアーキテクチャを放棄することはできず、この 2 つの統合を検討していましたが、HHVM の使用には多くの制限があると述べました。 HHVM は Facebook や多くの開発者にとって非常に優れたツールですが、PHP プロジェクトの場合、HHVM の使用範囲は十分に広くなく、Facebook や Wikipedia などの特定のプロジェクトのニーズにしか満たせません。

厳密に型指定された言語ではない PHP の場合、JIT をインポートすることはさらに困難です。

ただし、PHP に JIT コンパイルを追加することは非常に困難です。ラスムス・ラードルフ氏は、JITは、どの部分が重要なプログラムコードであるかを理解し、プログラムがいつ呼び出されるか、またはプログラムが呼び出される前にプログラムのどの部分が呼び出されるかを予測するなど、プログラムの動作パターン(パターン)を特定することを学習する必要があると述べた。走る。

ラスムス・レルドルフ氏は、多くの車では、JIT は車のどの部分が右折するか、どの部分が左折するか、または特定の色のどの車が直進するかを予測できなければならないと述べました。」 JIT はそれらすべてを予測する必要があります。「正解します。そうでないとパフォーマンスが大幅に低下します。」ただし、予測が正しければ、プログラムの実行パフォーマンスは大幅に向上します。

一般的なプログラミング言語のコンパイルに JIT を追加するのは簡単ではありません Rasmus Lerdorf 氏は、PHP の動的な性質のため、JIT を追加するのはさらに難しいと述べました。たとえば、開発者はパラメータ $a の値を 1 と宣言しましたが、パラメータ値は PHP で簡単に再定義できるため、プログラム内のすべての $a の値が 1 であることを意味するわけではありません。 C 言語では、開発者がパラメータ a を整数として宣言すると、a は常に整数になります。プログラムのどこかで a が整数以外の型であると宣言されている場合、コンパイルすらできなくなります。また、C 言語は厳密に型指定されたプログラミング言語であるため、「JIT は変数 a が整数であることを予測できますが、PHP ではそのような贅沢はありません。」HHVM のアプローチは、JIT が a が整数であることを学習したときに、 type 以降は、a は常に整数であると見なされます。

JIT コンパイルを使用するために、HHVM は PHP の開発をある程度制限しています。 HHVM のユーザーは変数の性質を明確に宣言する必要がありますが、PHP を使用する開発者は、最初に性質なしでカテゴリ (クラス) を宣言し、次にクラスの変数属性を指定できます。 「いかなる制限もなく、PHPにJITを追加することが私たちがしなければならないことだ。」同氏は、PHPはWordPress、Drupal、その他のフレームワークの開発者を考慮する必要があり、これらのフレームワークのサポートを恣意的に停止することはできないと述べた。したがって、HHVM と比較して、PHP では JIT の作成に関する制限が増えます。

しかし、「これは、JIT ができないという意味ではありません。さらに、PHP の開発方向も制御する必要があります。」と Rasmus Lerdorf 氏は言いました。

現在、PHP の中心的な貢献者の 1 人である Dmitry Stogov は、プロトタイプの JIT を開発し、いくつかの実験的アプリケーションを使用して動作をテストしています。 Rasmus Lerdorf 氏は、この JIT を特定の反復操作やループ プログラムの実行に使用すると、PHP 7 のパフォーマンスを 10 倍高速化できると述べました。

しかし、同氏は、この実験的な JIT を WordPress で使用したところ、加速効果が得られなかったことも認めました。「私たちが作りたい JIT は、大学の教科書で習うものではなく、学べるものです。」大学の教科書に載っています。「現実世界で働くJIT」と彼は言いました。それは、PHP が教科書上の理論だけでなく、人々の生活の問題を解決し、現実世界のオンライン環境で動作するという理想を常に抱いてきたからです。

Rasmus Lerdorf 氏は、PHP が初めて登場したとき、PHP の開発に 1 日に少なくとも 16 時間を費やしたと述べています。しかし現在、彼は開発への投資を徐々に減らし、その代わりに世界中での宣伝や講演にエネルギーを捧げています。彼は冗談めかして、「自分で開発するよりも、私よりはるかに賢くて、1 日 18 時間費やしてプログラムを書いて PHP を開発する人たちにインスピレーションを与えるほうが良いでしょう。」と述べ、最終的な目標は、彼が書いた PHP の 1 行のプログラミング コード、「成長するプロジェクトは 1 人の開発者によって主導されるべきではありません。古いプログラム コードは新しいプログラム コードに置き換えられるべきです。」 そして、他の開発者がこれを目指すべきだと彼は信じています。

推奨チュートリアル: 「php ビデオ チュートリアル

以上がPHP7のパフォーマンスを2倍にする鍵が明らかにの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。