検索
ホームページバックエンド開発PHPチュートリアルPHPのスレッドプロセスと同時インスタンスの詳細な説明


プロセス

プロセスとは何ですか?プロセスは実行中のプログラムであり、プロセスはコンピュータ上で実行されるプログラムのインスタンスであり、プロセッサに割り当てられて実行できるエンティティです。 プロセスには通常、命令セットとシステム リソース セットが含まれます。ここでの命令セットはプログラム コードを指し、システム リソース セットは I/O、CPU、メモリなどを指します。 要約すると、プロセスは、特定のデータ収集に対する特定の独立した機能を備えたプログラムの実行アクティビティであり、システム内のリソース割り当てとスケジューリングのための独立した単位であることも理解できます。

プロセスが実行されるとき、プロセスは次の要素で構成されて一意に表現できます:

  • プロセス記述子: プロセスの一意の識別子。他のプロセスと区別するために使用されます。これは Linux ではプロセス ID と呼ばれ、システム コールのフォーク中に生成されます。ただし、getpid を通じて返されるのはその pid フィールドではなく、スレッド グループ番号 tgid です。

  • プロセスステータス: サスペンド、実行中などとよく呼ばれる状態は、現在の状態を表します。

  • 優先度: 他のプロセスと比較した、プロセス間の実行スケジューリングに関連します。

  • プログラムカウンター: プログラム内で実行される次の命令のアドレスは、カーネルまたはユーザーメモリ空間のメモリアドレスです。

  • メモリ ポインタ: プログラム コードおよびプロセス関連データへのポインタ、および他のプロセスとの共有メモリ ブロックへのポインタが含まれます。

  • コンテキストデータ: プロセスが実行されるときのプロセッサのレジスタのデータ。

  • I/O ステータス情報: 明示的な I/O リクエスト、プロセスに割り当てられた I/O デバイスなど。

  • アカウンティング情報: 合計プロセッサー時間、使用されているクロックの合計数、および時間が含まれる場合があります。制限事項など

上記の要素は、プロセス制御ブロックと呼ばれるデータ構造に配置されます。プロセス制御ブロックは、オペレーティング システムが複数のプロセスをサポートし、多重処理を提供できるようにするための構造です。 オペレーティング システムはプロセスを切り替えるときに、現在のプロセッサのプロセスを中断するステップと、次のプロセスを実行するステップの 2 つのステップを実行します。 割り込みまたは実行に関係なく、プロセス制御ブロック内のプログラム カウンタ、コンテキスト データ、およびプロセス状態が変化します。 プロセスが中断されると、オペレーティング システムはプログラム カウンターとプロセッサ レジスタ (プロセス コントロール ブロック内のコンテキスト データに対応) をプロセス コントロール ブロック内の対応する場所に保存します。プロセスの状態も変化し、プロセス状態に移行する可能性があります。ブロッキング状態になるか、ブロッキング状態になる可能性があります。 次のプロセスが実行されると、オペレーティング システムはルールに従って次のプロセスを実行状態に設定し、実行されるプロセスのプログラム コンテキスト データとプログラム カウンタをロードします。

スレッド

プロセスには、リソースの所有権と実行のスケジュールという 2 つの特徴的な部分があります。 リソースの所有権とは、プロセスの実行に必要なメモリ空間、I/O、その他のリソースがプロセスに含まれていることを意味します。 スケジューリング実行とは、プロセス実行途中の実行経路、つまりプログラムの命令実行の流れを指します。 これら 2 つの機能部分を分離すると、データ所有権を持つ方は通常プロセスと呼ばれ、実行コードのディスパッチ可能な部分を持つ方はスレッドまたは軽量プロセスと呼ばれます。

スレッドには「実行の手掛かり」という意味があり、プロセスはマルチスレッド環境のリソース所有者として定義され、プロセスのプロセス制御ブロックが引き続き保存されます。 スレッドの構造はプロセスの構造とは異なります。各スレッドには以下が含まれます。

  • スレッドのステータス: スレッドの現在のステータス。

  • 実行スタック

  • プライベートデータ領域: 各スレッドのローカル変数用の静的ストレージスペース

  • レジスタセット: プロセッサの一部のステータスを保存します

各プロセスにはプロセス制御ブロックとユーザーアドレス空間があり、各スレッドには独立したスタックと独立した制御ブロックがあり、それぞれが独自の独立した実行コンテキストを持ちます。 その構造を図 8.1 に示します。

PHPのスレッドプロセスと同時インスタンスの詳細な説明

図 8.1 プロセスモデル図

スレッドは、実行中のプロセスとは多少異なります。それぞれの独立したスレッドには、プログラム実行のエントリ ポイント、順次実行シーケンス、およびプログラムの終了ポイントがあります。 ただし、スレッドは独立して実行できず、プロセス内に存在する必要があり、プロセスは複数のスレッドの実行制御を提供します。 論理的な観点から見ると、マルチスレッドの意味は、プロセス内で複数の実行部分を同時に実行できることです。 現時点では、プロセス自体は基本的な実行単位ではなく、スレッドのコンテナーです。

プロセスと比較すると、スレッドの利点は、新しいスレッドの作成でも、スレッドの終了でも、スレッド間のデータや通信の共有でも、高速であることです。プロセスの。


同時実行性と並列性

同時実行性は、共存とも呼ばれ、複数の同時アクティビティを処理できる機能を指しますが、必ずしも同時に発生する必要はありません。 たとえば、現代のコンピュータ システムは、複数のプログラムをプロセスの形でメモリに同時にロードし、プロセッサの時分割多重化を使用して、1 つのプロセッサ上で同時に実行しているような感覚を与えることができます。

パラレルとは、同時に発生する 2 つの同時イベントを指し、並行性の意味を持ちますが、同時性は必ずしも並行しているわけではありません。

同時実行と並列処理の違いは、1 つのプロセッサが複数のタスクを同時に処理するのに対し、複数のプロセッサまたはマルチコア プロセッサは複数の異なるタスクを同時に処理することです。 前者は論理的同時性であり、後者は物理的同時性です。

PHPのさまざまな同時実行モデル

2つのモデルがあるので、PHPはどちらを使用するのでしょうか?答えは、それらはすべてサポートされているということです。これは、PHP がマルチスレッド モデルをサポートしていることを意味します。マルチスレッドの状況では、通常、リソースの共有と分離の問題を解決する必要があります。 PHP 自体はスレッドセーフです。

具体的なモデルは、どの SAPI が使用されるかによって異なります。たとえば、Apache では、マルチスレッド モデルまたはマルチプロセス モデルが使用されます。また、php-fpm はマルチプロセス モデルを使用します。

現在推奨されている方法は、php-fpm モデルを使用することです。このモデルには PHP にとって多くの利点があります。

  1. メモリ解放が簡単で、マルチプロセス モデルを使用する場合は、次の方法で簡単にプロセスを解放できます。 PHP には多くの拡張機能があるため、FPM はプロセスの終了によって暴力を排除するだけで問題を解決します。

  2. 同じ問題に対して、拡張機能または PHP が単一プロセス マルチスレッド モデルの場合、PHP 全体がハングする可能性があります。これはサービスに影響しますが、複数のプロセスが存在する場合、特定のプロセスが停止してもサービス全体には影響しません。

マルチプロセスにはマルチプロセスの利点があり、マルチスレッドにもマルチスレッドの利点があります。たとえば、HHVM はマルチスレッド モデルを選択します。 マルチスレッド モデルの最大の利点は、ポインタを同じプロセス空間で直接使用できるため、情報の共有と通信が便利になることです。

たとえば、PHP、apc、opcache などでは共有メモリを使用してオペコードを共有しますが、HHVM では共有メモリを使用する必要がなく、保存が不便です。複雑なデータ構造。ポインターの問題により、C/C++ のデータ構造はマルチスレッド状況で共有できます。これは効率の向上にも役立ちます。

マルチプロセッシングとマルチスレッドの間には、リクエストを処理する際のロジックという明らかなモデルの違いもあります。

マルチプロセスの場合、プロセスをまたいでFD接続を渡すことが困難です。通常、多くのプロセスは親プロセスで負荷分散を実装します。このようなモデルでは群集問題が発生する可能性があります。 listen(), 然后各个子进程accept()

マルチスレッド モデルでは、独立したスレッドを使用してリクエストを受け入れ、それを各ワーカー スレッドにディスパッチできます。

関連する推奨事項:

シングルスレッド JS 実行の問題の詳細な説明

PHP のマルチスレッド プログラミングのサポートと、

を使用して PHP マルチスレッド クラスを実装するケース

以上がPHPのスレッドプロセスと同時インスタンスの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPの継続的な使用:その持久力の理由PHPの継続的な使用:その持久力の理由Apr 19, 2025 am 12:23 AM

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPおよびPython:類似点と相違点を調査しますPHPおよびPython:類似点と相違点を調査しますApr 19, 2025 am 12:21 AM

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 中国語版

SublimeText3 中国語版

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

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境