この記事では、PHP の実行プロセスを詳細に分析します。一定の参考値があるので、困っている友達が参考になれば幸いです。
#PHP の基礎となる言語は C 言語であり、C 言語はコンパイルされた言語です。
コンパイル言語: プログラムは実行前に特別なコンパイル プロセスが必要です。プログラムは機械語ファイルにコンパイルされます。実行時に再翻訳する必要はありません。コンパイルされた言語を使用するだけです。結果が直接出ます。プログラムの実行効率は高く、コンパイラに依存し、クロスプラットフォームのパフォーマンスは低いです。
プロセスンを使って絵を描いたので、ゆっくりと穴を埋めていきます
絵が鮮明でない場合は、元の画像を見ることができます
アドレス: http://assets.processon.com/chart_image/603b293b1e08530bb1adcb1c.png
# 画像のプロセスを簡単に説明します#まず、CLI および FPM プロセスは考慮しないでください。 C 言語は、open_file_sanning 関数を通じて php サフィックスを持つファイルに解析されます。 2 コンパイル関数 zend_compile_file() を呼び出してコンパイルします。この関数の具体的な実装には、実際には字句解析 (Lex 実装) と構文解析 (Yacc 実装) という 2 つの主要なプロセスが含まれます。この関数を実行すると、php スクリプトのコンパイルが完了します。この関数の入力は: php スクリプト ファイル、出力は op_array です。簡単に言うと、コンパイル プロセスは、スクリプトを php 仮想マシンが処理できる命令に解析することであり、op_array はこれらの命令で構成される単なる配列です。 ( これは、一部のコンパイル言語のコンパイルによって生成されるアセンブリ コードに非常に似ています。また、一連のコマンドでもあります。 3 VM 仮想マシンは、実行するために zend_execute() 関数を呼び出します。この関数の入力上記のコンパイル段階で生成された op_array です。ここで、各コマンドを解析して処理します。PHP7.4.5 には約 200 の op コマンドがあるため、これらのコマンドを処理する必要があります。各コマンドには、処理に対応するプロセッサがあります。 virtual 仮想マシンは、op_array 内の各コマンドのタイプに基づいて、対応するプロセッサに分散されて処理されます。ここでのプロセッサは、zend 仮想マシンのプロセッサです。CPU ではありません
Zend 仮想マシンプロセッサ 実際には op コマンドを処理するためのロジックです コマンドの配布方法に応じて、関数または論理セグメントの形式で存在できます
Zend 配布には 3 つのメカニズムがあります
PHP コードは実際には zend vm 仮想マシン内で実行され、CPU 内で直接実行されるわけではないことがわかります。
PHP8 での JIT の出現により、一部の機能が可能になります。マシンコードにコンパイルされるコード CPU で実行される この部分については、@rhett の記事「PHP JIT テクノロジの詳細な説明」で行われた分析を参照してください。記事アドレス: https://zhuanlan.zhihu.com/p /331777202
「設計と実装の基礎となる PHP7 ソース コード」についてシニア Chen Lei に感謝します>>
この記事は、の同意を得て PHP 中国語 Web サイトに掲載されています。元の著者 PHP Cui Xuefeng 元のアドレス: https://zhuanlan.zhihu.com/p/353501903
推奨学習: 「PHP ビデオ チュートリアル
」
以上がPHP の基礎となる実行プロセスの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。