PHPのスレッドプロセスと同時インスタンスの詳細な説明
プロセス
プロセスとは何ですか?プロセスは実行中のプログラムであり、プロセスはコンピュータ上で実行されるプログラムのインスタンスであり、プロセッサに割り当てられて実行できるエンティティです。 プロセスには通常、命令セットとシステム リソース セットが含まれます。ここでの命令セットはプログラム コードを指し、システム リソース セットは I/O、CPU、メモリなどを指します。 要約すると、プロセスは、特定のデータ収集に対する特定の独立した機能を備えたプログラムの実行アクティビティであり、システム内のリソース割り当てとスケジューリングのための独立した単位であることも理解できます。
プロセスが実行されるとき、プロセスは次の要素で構成されて一意に表現できます:
プロセス記述子: プロセスの一意の識別子。他のプロセスと区別するために使用されます。これは Linux ではプロセス ID と呼ばれ、システム コールのフォーク中に生成されます。ただし、getpid を通じて返されるのはその pid フィールドではなく、スレッド グループ番号 tgid です。
プロセスステータス: サスペンド、実行中などとよく呼ばれる状態は、現在の状態を表します。
優先度: 他のプロセスと比較した、プロセス間の実行スケジューリングに関連します。
プログラムカウンター: プログラム内で実行される次の命令のアドレスは、カーネルまたはユーザーメモリ空間のメモリアドレスです。
メモリ ポインタ: プログラム コードおよびプロセス関連データへのポインタ、および他のプロセスとの共有メモリ ブロックへのポインタが含まれます。
コンテキストデータ: プロセスが実行されるときのプロセッサのレジスタのデータ。
I/O ステータス情報: 明示的な I/O リクエスト、プロセスに割り当てられた I/O デバイスなど。
アカウンティング情報: 合計プロセッサー時間、使用されているクロックの合計数、および時間が含まれる場合があります。制限事項など
上記の要素は、プロセス制御ブロックと呼ばれるデータ構造に配置されます。プロセス制御ブロックは、オペレーティング システムが複数のプロセスをサポートし、多重処理を提供できるようにするための構造です。 オペレーティング システムはプロセスを切り替えるときに、現在のプロセッサのプロセスを中断するステップと、次のプロセスを実行するステップの 2 つのステップを実行します。 割り込みまたは実行に関係なく、プロセス制御ブロック内のプログラム カウンタ、コンテキスト データ、およびプロセス状態が変化します。 プロセスが中断されると、オペレーティング システムはプログラム カウンターとプロセッサ レジスタ (プロセス コントロール ブロック内のコンテキスト データに対応) をプロセス コントロール ブロック内の対応する場所に保存します。プロセスの状態も変化し、プロセス状態に移行する可能性があります。ブロッキング状態になるか、ブロッキング状態になる可能性があります。 次のプロセスが実行されると、オペレーティング システムはルールに従って次のプロセスを実行状態に設定し、実行されるプロセスのプログラム コンテキスト データとプログラム カウンタをロードします。
スレッド
プロセスには、リソースの所有権と実行のスケジュールという 2 つの特徴的な部分があります。 リソースの所有権とは、プロセスの実行に必要なメモリ空間、I/O、その他のリソースがプロセスに含まれていることを意味します。 スケジューリング実行とは、プロセス実行途中の実行経路、つまりプログラムの命令実行の流れを指します。 これら 2 つの機能部分を分離すると、データ所有権を持つ方は通常プロセスと呼ばれ、実行コードのディスパッチ可能な部分を持つ方はスレッドまたは軽量プロセスと呼ばれます。
スレッドには「実行の手掛かり」という意味があり、プロセスはマルチスレッド環境のリソース所有者として定義され、プロセスのプロセス制御ブロックが引き続き保存されます。 スレッドの構造はプロセスの構造とは異なります。各スレッドには以下が含まれます。
スレッドのステータス: スレッドの現在のステータス。
実行スタック
プライベートデータ領域: 各スレッドのローカル変数用の静的ストレージスペース
レジスタセット: プロセッサの一部のステータスを保存します
各プロセスにはプロセス制御ブロックとユーザーアドレス空間があり、各スレッドには独立したスタックと独立した制御ブロックがあり、それぞれが独自の独立した実行コンテキストを持ちます。 その構造を図 8.1 に示します。
図 8.1 プロセスモデル図
スレッドは、実行中のプロセスとは多少異なります。それぞれの独立したスレッドには、プログラム実行のエントリ ポイント、順次実行シーケンス、およびプログラムの終了ポイントがあります。 ただし、スレッドは独立して実行できず、プロセス内に存在する必要があり、プロセスは複数のスレッドの実行制御を提供します。 論理的な観点から見ると、マルチスレッドの意味は、プロセス内で複数の実行部分を同時に実行できることです。 現時点では、プロセス自体は基本的な実行単位ではなく、スレッドのコンテナーです。
プロセスと比較すると、スレッドの利点は、新しいスレッドの作成でも、スレッドの終了でも、スレッド間のデータや通信の共有でも、高速であることです。プロセスの。
同時実行性と並列性
同時実行性は、共存とも呼ばれ、複数の同時アクティビティを処理できる機能を指しますが、必ずしも同時に発生する必要はありません。 たとえば、現代のコンピュータ システムは、複数のプログラムをプロセスの形でメモリに同時にロードし、プロセッサの時分割多重化を使用して、1 つのプロセッサ上で同時に実行しているような感覚を与えることができます。
パラレルとは、同時に発生する 2 つの同時イベントを指し、並行性の意味を持ちますが、同時性は必ずしも並行しているわけではありません。
同時実行と並列処理の違いは、1 つのプロセッサが複数のタスクを同時に処理するのに対し、複数のプロセッサまたはマルチコア プロセッサは複数の異なるタスクを同時に処理することです。 前者は論理的同時性であり、後者は物理的同時性です。
PHPのさまざまな同時実行モデル
2つのモデルがあるので、PHPはどちらを使用するのでしょうか?答えは、それらはすべてサポートされているということです。これは、PHP がマルチスレッド モデルをサポートしていることを意味します。マルチスレッドの状況では、通常、リソースの共有と分離の問題を解決する必要があります。 PHP 自体はスレッドセーフです。
具体的なモデルは、どの SAPI が使用されるかによって異なります。たとえば、Apache では、マルチスレッド モデルまたはマルチプロセス モデルが使用されます。また、php-fpm はマルチプロセス モデルを使用します。
現在推奨されている方法は、php-fpm モデルを使用することです。このモデルには PHP にとって多くの利点があります。
メモリ解放が簡単で、マルチプロセス モデルを使用する場合は、次の方法で簡単にプロセスを解放できます。 PHP には多くの拡張機能があるため、FPM はプロセスの終了によって暴力を排除するだけで問題を解決します。
同じ問題に対して、拡張機能または PHP が単一プロセス マルチスレッド モデルの場合、PHP 全体がハングする可能性があります。これはサービスに影響しますが、複数のプロセスが存在する場合、特定のプロセスが停止してもサービス全体には影響しません。
マルチプロセスにはマルチプロセスの利点があり、マルチスレッドにもマルチスレッドの利点があります。たとえば、HHVM はマルチスレッド モデルを選択します。 マルチスレッド モデルの最大の利点は、ポインタを同じプロセス空間で直接使用できるため、情報の共有と通信が便利になることです。
たとえば、PHP、apc、opcache などでは共有メモリを使用してオペコードを共有しますが、HHVM では共有メモリを使用する必要がなく、保存が不便です。複雑なデータ構造。ポインターの問題により、C/C++ のデータ構造はマルチスレッド状況で共有できます。これは効率の向上にも役立ちます。
マルチプロセッシングとマルチスレッドの間には、リクエストを処理する際のロジックという明らかなモデルの違いもあります。
マルチプロセスの場合、プロセスをまたいでFD接続を渡すことが困難です。通常、多くのプロセスは親プロセスで負荷分散を実装します。このようなモデルでは群集問題が発生する可能性があります。 listen()
, 然后各个子进程accept()
以上がPHPのスレッドプロセスと同時インスタンスの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の 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 にアップグレードする方法について説明します。

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

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

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

このチュートリアルでは、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元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
