ホームページ  >  記事  >  バックエンド開発  >  PHP 8 の JIT を理解する

PHP 8 の JIT を理解する

coldplay.xixi
coldplay.xixi転載
2020-08-19 17:14:253739ブラウズ

PHP 8 の JIT を理解する

【関連する推奨事項: PHP 8 の JIT を理解する8

PHP 8 の JIT を理解する

TL;DR

PHP 8 の JIT を理解する 8 の JIT (Just In Time) コンパイラは、拡張機能として PHP 8 の JIT を理解する に統合されます。Opcache 拡張機能は、実行時に特定のオペコードを CPU 命令に直接変換するために使用されます。

これは、JIT を使用した後、Zend VM が特定のオペコードを解釈する必要がなく、これらの命令が CPU レベルの命令として直接実行されることを意味します。

PHP 8 の JIT を理解する 8 の JIT

PHP 8 の JIT を理解する 8 Just In Time (JIT) コンパイラーの影響は疑いの余地がありません。しかし、これまでのところ、JIT が何を行うべきかについてはほとんど知られていないことがわかりました。

いろいろ調べて諦めた結果、PHP 8 の JIT を理解するのソースコードを自分でチェックすることにしました。 C 言語に関する私の知識の一部と、これまでに集めた散在する情報をすべて組み合わせて、この記事を作成しました。これが、PHP 8 の JIT を理解する の JIT をよりよく理解するのに役立つことを願っています。

簡単に言うと、JIT が期待どおりに動作する場合、コードは Zend VM を通じてではなく、CPU レベルの命令のセットとして直接実行されます。

これが全体的なアイデアです。

しかし、それをよりよく理解するには、php が内部でどのように動作するかを考慮する必要があります。それほど複雑ではありませんが、少し説明が必要です。

私は、php の仕組みの概要を説明するブログ投稿を書きました。この投稿が多すぎると思われる場合は、別の投稿を確認して、後で戻ってきてください。物事が理解しやすくなります。

PHP 8 の JIT を理解する コードはどのように実行されますか?

ご存知のとおり、PHP 8 の JIT を理解する はインタープリタ型言語ですが、この文自体は何を意味するのでしょうか?

PHP 8 の JIT を理解する コード (コマンド ライン スクリプトまたは WEB アプリケーション) が実行されるたびに、PHP 8 の JIT を理解する インタープリターを通過する必要があります。最も一般的に使用されるのは、PHP 8 の JIT を理解する-FPM と CLI インタープリターです。

インタプリタの仕事は単純です。PHP 8 の JIT を理解する コードを受け取り、それを解釈し、結果を返すことです。

一般的な通訳言語はこのプロセスに従います。言語によってはいくつかの手順が省略される場合がありますが、一般的な考え方は同じです。 PHP 8 の JIT を理解する では、プロセスは次のとおりです。

  1. PHP 8 の JIT を理解する コードを読み取り、それをトークンと呼ばれるキーワードのセットとして解釈します。このプロセスにより、インタプリタは各プログラムにどのようなコードが記述されているかを知ることができます。 このステップは、レクシングまたはトークン化と呼ばれます。

  2. #トークン コレクションを取得した後、PHP 8 の JIT を理解する インタープリターはそれらを解析しようとします。抽象構文ツリー (AST) は、Parsing と呼ばれるプロセスを通じて生成されます。ここで、AST は、実行する操作を表すノードのセットです。たとえば、「echo 1 1」は実際には「1 1 の結果を出力」、より具体的には「操作を出力、この操作は 1 1」を意味します。

  3. AST を使用すると、操作と優先順位を理解しやすくなります。抽象構文ツリーを CPU で実行できる操作に変換するには、PHP 8 の JIT を理解する ではオペコードと呼ばれる遷移式 (IR) が必要です。 AST をオペコードに変換するプロセスは、 コンパイル と呼ばれます。

  4. オペコードの楽しい部分は、コードの実行です。 PHP 8 の JIT を理解する には Zend VM と呼ばれるエンジンがあり、一連のオペコードを受け取って実行できます。すべてのオペコードが実行された後、Zend VM はプログラムを終了します。

この図を見ると、よりわかりやすくなります:

PHP 8 の JIT を理解する 的解释流程.

PHP 8 の JIT を理解する 解釈プロセスの概要の簡略版。 ######ご覧のように。ここで質問があります。PHP 8 の JIT を理解する コードが変更されていない場合でも、このプロセスは実行されるたびに実行されますか?

オペコードを振り返ってみましょう。正しい!これが、

Opcache 拡張機能

が存在する理由です。

Opcache 拡張機能

Opcache 拡張機能は PHP 8 の JIT を理解する に付属しているため、通常は無効にする必要はありません。 PHP 8 の JIT を理解する を使用する場合は、Opcache をオンにすることをお勧めします。

その機能は、メモリ共有キャッシュ層をオペコードに追加することです。その役割は、新しく生成されたオペコードを AST から抽出してキャッシュし、実行中に字句解析/トークン化と解析のステップをスキップできるようにすることです。

これは、Opcache 拡張機能を含むプロセス図です:

Opcache を使用した PHP 8 の JIT を理解する の解釈プロセス。ファイルがすでに解析されている場合、PHP 8 の JIT を理解する は再度解析する代わりに、そのファイルのキャッシュされたオペコードを取得します。 使用 Opcache 的 PHP 8 の JIT を理解する 解释流程

字句解析/トークン化、解析、コンパイルの手順を完全にスキップする

関連学習の推奨事項:

php プログラミング
(ビデオ)

#

以上がPHP 8 の JIT を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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