PHP7 カーネル分析 10 スレッド セーフ
この記事の内容は、PHP7 カーネル分析 10 のスレッド セーフについてです。必要な友人は参考にしてください。1. スレッド セーフ リソース マネージャー
PHP の SAPI のほとんどは単一です。 cli、fpm、cgi などのスレッド環境では、各プロセスは 1 つのメインスレッドのみを開始します。このモードではスレッド セーフティの問題はありませんが、Apache などのマルチスレッド環境もあり、その場合はスレッド セーフティが必要です。これは、最も一般的なものである EG や CG などのグローバル変数が多数あるため、複数のスレッドが同じ変数を共有する場合に競合するため、問題となります。そのため、PHP はマルチスレッド用のセキュリティ メカニズムを提供します。アプリケーション モデル: Zend スレッド セーフ (Zend Thread Safe、ZTS)。
PHP は、特にスレッド セーフの問題を解決するために、スレッド セーフ リソース マネージャー (TSRM) を抽象化します。実装原理は比較的単純です。リソースを共有するのは非常に難しいため、単純にリソースを共有しなければ、各スレッドは共有されなくなります。データを使用する場合、同じグローバル変数が個別にコピーされ、相互に干渉することはありません。リソースを複数のスレッドで使用する場合、事前にTSRMにリソースを登録する必要があります。その後、TSRMはリソースに一意の番号を割り当て、このリソースのサイズや初期化関数などを保存しますtsrm_resource_type 構造体。各スレッドは、TSRM によって割り当てられた番号を通じてのみこのリソースにアクセスできます。スレッドがこの番号のリソースを取得すると、それが最初のリクエストであることが判明すると、そのリソースに基づいてメモリが割り当てられます。登録時にサイズを指定してから、初期化関数を呼び出し、このリソースを初期化して、このスレッドで後で使用できるように保存します。 各スレッドには tsrm_tls_entry 構造があり、現在のスレッドのすべてのリソースはストレージ配列に保存され、添え字は各リソースの ID です。さらに、すべてのスレッドの tsrm_tls_entry 構造体が配列 tsrm_tls_table に保存されます。これはグローバル変数です。この配列内の各スレッドの tsrm_tls_entry 構造体の位置は、スレッド ID と事前に設定されたスレッド数 (tsrm_tls_table_size) をモジュロとして取得されます。複数のスレッドが tsrm_tls_table の同じ場所に格納される可能性があるため、 tsrm_tls_entry はリンク リストです。リソースを探すときは、まずスレッド ID % tsrm_tls_table_size に基づいて tsrm_tls_entry を取得し、次にリンク リストの走査を開始します。 thread_id を使用して、現在のスレッドに属しているかどうかを判断します。typedef struct { size_t size; //资源的大小 ts_allocate_ctor ctor; //初始化函数 ts_allocate_dtor dtor; int done; } tsrm_resource_type; struct _tsrm_tls_entry { void **storage; //资源数组 int count; //拥有的资源数:storage数组大小 THREAD_T thread_id; //所属线程id tsrm_tls_entry *next; };ログイン後にコピー
スレッド ローカル ストレージ (TLS)、現在のスレッドの tsrm_tls_entry を作成した後、この値は現在のスレッドの TLS に保存されるため、 ts_resource() がリソースを取得するときに、 tsrm_tls_get() を通じて直接取得でき、保存されます。ロックと取得の時間。
関連する推奨事項:
PHP7 カーネル分析 9 メモリ管理
以上がPHP7 カーネル分析 10 スレッド セーフの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります
