ホームページ >バックエンド開発 >PHPチュートリアル >2022 年の PHP 機能、カーネル、アーキテクチャに関する最新の簡単な分析

2022 年の PHP 機能、カーネル、アーキテクチャに関する最新の簡単な分析

藏色散人
藏色散人転載
2022-08-07 14:24:343057ブラウズ

PHP8の機能?

1. JIT ジャストインタイム コンパイラー。 opcache の最適化に基づいて、jit はランタイム情報と組み合わせて再度最適化し、マシンコードを直接生成します。 JIT は opcache 最適化に代わるものではなく、拡張機能です。

2. 値の変換と変数の代入に使用される一致式。

3. ユニオン型。

複数の異なる型の宣言と受け入れをサポートします。これは 2 つ以上の型のコレクションです。

4. 静的な戻り値の型。 PHP 8 での静的な戻り値の型のサポートは、より効率的になります。

5. 弱いマッピング WeakMap。配列内のキーをオブジェクトに配置できるようにします。

6. クラスの変更、使用

  • 1. 変数パラメーターの継承 (無味)、許可されます

  • 2. 後期静的バインディング (LSB) (便利)、フレームワーク レベルのカプセル化および一部のファクトリ デザイン パターンに役立ちます。

  • 3. 次のメソッドを使用して、オブジェクト

  • 4 のクラス名を取得できます。new と instanceof は次のようになります。任意の式で使用する場合は、 new(expression)(... $args) および $obj instanceof(expression) を使用します。

  • #5.書き込みが許可されるようになりました。

  • 6. Stringable インターフェイス (ビュー テンプレートのカプセル化で使用される一般的な関数) を追加します。

  • 7. Trait で抽象プライベート メソッドを定義できるようになりました。

PHP7 の新機能? (PHP5との違い)

1. スカラー型宣言と戻り値型宣言。

2. null 合体演算子 (??)

3. 名前空間参照の使用強化: 同じ名前空間からインポートされたクラス、関数、定数を、単一の use ステートメントを通じて一度にインポートできるようになりました

4. 匿名クラス: 新しいクラスによる匿名クラスのインスタンス化をサポートします

##5. パフォーマンスは php5 の 2 倍です。

6. 64 ビットをサポートします。

php7 のパフォーマンスが php5 に比べて向上しているのはなぜですか?

1. 変数ストレージのバイトが削減されます。メモリ使用量を削減し、可変演算速度を向上させ、
#2、配列構造を改善します。配列要素とハッシュ マッピング テーブルが同じメモリに割り当てられるため、メモリ使用量が削減され、CPU キャッシュ ヒット率が向上し、関数呼び出しメカニズムが改善されます。パラメータ転送処理を最適化することで、一部の命令が削減され、実行効率が向上します。

PHP7 実行プロセス?

ソースコードを複数の文字列単位 (トークン) に分割する字句解析

2022 年の PHP 機能、カーネル、アーキテクチャに関する最新の簡単な分析 構文アナライザーはトークンを AST 抽象文法ツリーに変換します

抽象構文ツリーはオペコード (オペコード命令セット) に変換されます。

#仮想マシンはオペコードを解釈して実行します (オペコードは、ハンドラ処理関数に対応する命令識別子のセットです)

Web モードでは、PHP のライフサイクルはどうなりますか?

SAPI は次のステージを通じて PHP を実行します:

1. モジュール初期化ステージ (module init): このステージは主に PHP フレームワークと zend の初期化操作を実行します。エンジンです。このステージは通常 SAPI の起動時に 1 回実行されますが、FPM の場合は fpm マスターの起動時に実行されます。 PHP は各拡張機能のコードをロードし、そのモジュール初期化ルーチン (MINIT) を呼び出して、モジュールに必要ないくつかの変数を適用したり、メモリを割り当てたりします。

2. リクエストの初期化フェーズ (リクエストの初期化):

ページ リクエストが発生すると、リクエストが処理される前に経験されるステージです。 fpm の場合、これはワーカー プロセスがリクエストを受け入れ、リクエスト データを読み取って解析した後の段階です。この段階で、SAPI レイヤーは制御を PHP レイヤーに渡し、PHP はこのリクエストのスクリプトを実行するために必要な環境変数を初期化します。

3. PHP スクリプト実行ステージ:

PHP コードの解析と実行のプロセス。 Zend エンジンが制御を引き継ぎ、PHP スクリプト コードをオペコードにコンパイルし、それを順番に実行します

4. シャットダウン要求:

要求が処理されると、シャットダウン フェーズに入り、PHP がクリーンアップされます。プロセスが開始されます。この段階では、出力内容のフラッシュ、http 応答内容の送信などが行われ、各モジュールの RSHUTDOWN メソッドが順番に呼び出されます。 RSHUTDOWN は、プログラムの実行中に生成されたシンボル テーブルをクリアする、つまり各変数の unset 関数を呼び出すために使用されます。

5. モジュールのシャットダウン:

このステージは SAPI が閉じられたときに実行され、モジュールの初期化ステージに相当します。このステージでは主にリソースをクリーンアップし、各 PHP モジュールを閉じます。同時に、各拡張機能のモジュール シャットダウン フック関数がコールバックされます。これは、fpm のシャットダウンなど、すべてのリクエストが完了した後に発生します。 (これは CGI や CLI などの SAPI 用です。「次のリクエスト」がないため、SAPI はすぐに終了し始めます。)

php7 アーキテクチャとは何ですか?

2022 年の PHP 機能、カーネル、アーキテクチャに関する最新の簡単な分析

Zend エンジン: Zend エンジンは、字句解析と構文解析、AST 抽象構文ツリーのコンパイル オペコードの実行、PHP 変数の設計、メモリ管理などの PHP の基本サービスを提供します。 、プロセス管理。

PHP 層: SAPI 層をバインドし、SAPI 層との通信を処理します。また、safe_mode と open_basedir を検出するための一貫した制御層も提供し、fopen()、fread()、fwrite( などのユーザー空間を統合します) ) ファイルおよびネットワーク I/O に関連する関数。

SAPI: 外部インターフェースを抽象化した cli fpm などを含み、SAPI プロトコルに準拠していればサーバーを実装できます。

拡張: zend エンジンはコア機能とインターフェイス仕様を提供します。これに基づいて、

php データ実装を開発および拡張できます?

PHP データの基礎となる実装はハッシュ テーブル (hashTable とも呼ばれます) です。

#PHP のガベージ コレクション メカニズムとは何ですか?

PHP は自動的にメモリを管理し、不要なオブジェクトを削除できます。

PHP は参照カウント GC メカニズムを使用します。

各オブジェクトには参照カウンタ refcount が含まれています。各参照はオブジェクトに接続され、カウンタは 1 ずつ増加します。参照がリビング スペースから出るか、NULL に設定されると、カウンターは 1 ずつ減らされます。オブジェクトの参照カウンタがゼロになると、PHP はそのオブジェクトを使用する必要がなくなったことを認識し、そのオブジェクトが占有しているメモリ領域を解放します。

#PHP-FPM のアーキテクチャ モデルとは何ですか?どのように最適化しましたか?

これはマスターとワーカーのアーキテクチャ パターンであり、ワークはリクエストを処理し、マスターは子プロセスを管理およびリサイクルします。

最適化のため、プロセス数の構成を変更しました。

簡単に説明します: 以前に構成された静的モードにより、デフォルトのプロセス数は 200 でした。その後、一定の同時実行性が発生したため、「3 番目」の構成モードに変更して、指定された数を構成する必要があります。プロセス数には最小値と最大値があり(実際には最大値はここでは忘れていますが、制限がないはずだと思います。結局のところ、ハードウェアリソースが上限です)、それに基づいてプロセス数を動的に増加させます。実際のリクエスト数に応じて。

以上が2022 年の PHP 機能、カーネル、アーキテクチャに関する最新の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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