PHP プロセス モデルは、実行プログラムであり、プロセッサに割り当ててプロセッサによって実行できるエンティティです。PHP プロセスの通信方法には、パイプと名前付きパイプ、シグナル、共有メモリなどが含まれます。PHP プロセススレッド 違いは、プロセスがリソース割り当てとスケジューリングの独立した単位であるのに対し、スレッドは CPU スケジューリングの基本単位であることです。
PHP プロセス モデル、プロセス通信メソッド、プロセス スレッドの違いは次のとおりです。
1. PHP プロセス モデル
プロセスの概念は、オペレーティング システムの構造の基礎です。 Multics の設計者がこの専門用語を初めて使用したのは 1960 年代で、宿題よりも一般的な用語です。プロセスの定義は次のとおりです:
1. 実行中のプログラム。
2. コンピューター上で実行されているプログラムのインスタンス。
3. プロセッサに割り当てて実行できるエンティティ。
4. 実行の単一の連続スレッド、現在の状態、および関連するシステム リソースのセットによって記述されるアクティビティ単位。
#関連する学習の推奨事項:# 2. プロセスとスレッドの違い
プロセス
は、リソース割り当ての基本単位です。プロセスに関連するすべてのリソースは、プロセス制御ブロック PCB
に記録されます。プロセスがこれらのリソースを所有しているか、使用していることを示します。 さらに、プロセスはプロセッサをプリエンプトするスケジューリング単位でもあり、完全な仮想アドレス空間を持っています。プロセスがスケジュールされると、異なるプロセスは異なる仮想アドレス空間を持ち、同じプロセス内の異なるスレッドは同じアドレス空間を共有します。
プロセスに対応するスレッドは、リソースの割り当てとは関係なく、特定のプロセスに属し、そのプロセスのリソースをプロセス内の他のスレッドと共有します。
Thread は、関連するスタック (システム スタックまたはユーザー スタック) レジスタとスレッド制御テーブル TCB
のみで構成されます。レジスタはスレッド内のローカル変数を格納するために使用できますが、他のスレッドに関連する変数を格納することはできません。 通常、プロセスには複数のスレッドを含めることができ、プロセスが所有するリソースを利用できます。スレッドを導入したオペレーティング システムでは、通常、プロセスがリソース割り当ての基本単位とみなされ、スレッドが独立動作および独立スケジューリングの基本単位とみなされます。スレッドはプロセスよりも小さく、基本的にシステム リソースを所有しないため、スレッドをスケジュールするためのオーバーヘッドがはるかに小さくなり、システム内の複数のプログラム間の同時実行の度合いがより効率的に向上し、システム リソースの使用率とスループットが大幅に増加します。 。そのため、近年発売された汎用オペレーティング システムでは、システムの同時実行性をさらに向上させるためにスレッドが導入されており、スレッドは現代のオペレーティング システムの重要な指標と見なされています。
(1) プロセスはリソース割り当てとスケジューリングの独立した単位ですが、プロセスはリソース割り当てとスケジューリングの独立した単位です。スレッドは CPU スケジューリングの基本単位です。
(2) 同じプロセスには複数のスレッドを含めることができ、スレッドはプロセス全体のリソース (レジスタ、スタック、コンテキスト) を共有し、1 つのプロセスには少なくとも 1 つのスレッドが含まれます。糸。
(3) プロセスの作成は fork または vfork を呼び出し、スレッドの作成は pthread_create を呼び出します。プロセスが終了すると、そのプロセスが所有するすべてのスレッドが破棄され、スレッドの終了は影響を受けません。同じプロセス内の他のスレッド。End
(4) スレッドは軽量プロセスであり、その作成と破棄にかかる時間はプロセスよりもはるかに短いです。オペレーティング システムのすべての実行機能は、スレッドを作成することによって完了します
(5) スレッドで実行する場合は、通常、同じプロセスのすべてのリソースを共有するため、同期と相互排他が必要です。
(6) スレッドには独自のプライベート属性 (TCB、スレッド ID、レジスタ、およびハードウェア) があります。コンテキスト、およびプロセスには独自のプライベート属性プロセス コントロール ブロック PCB もあります。これらのプライベート属性は共有されず、プロセスまたはスレッドをマークするために使用されます。
3. プロセス間通信方法1. パイプ (パイプ) と名前付きパイプ (名前付きパイプ):
パイプは、アフィニティ関係を持つプロセス間の通信に使用できます。名前付きパイプは、パイプにはない制限を克服します。したがって、パイプの機能に加えて、関係のないプロセス間の通信も可能になります;
2. シグナル:シグナルは、特定のイベントが発生したときの通知に使用される比較的複雑な通信方法です。受信プロセスで発生し、プロセス間通信に使用されるだけでなく、プロセスはプロセス自体にシグナルを送信することもできます。初期の Unix シグナル セマンティック関数 sigal のサポートに加え、Linux ではセマンティクスが準拠するシグナル関数 sigaction もサポートされています。 Posix.1 標準に準拠 (実際、この関数は BSD に基づいています。信頼性の高いシグナル メカニズムを実現し、外部インターフェイスを統一するために、BSD は sigaction 関数を使用してシグナル関数を再実装しました); 3. メッセージ キュー (メッセージ キュー): メッセージ キューは、Posix メッセージ キュー システム V メッセージ キューを含む、メッセージのリンク リストです。十分な権限を持つプロセスはキューにメッセージを追加でき、読み取り権限を付与されたプロセスはキューからメッセージを読み取ることができます。メッセージ キューは、少量の情報を運ぶ信号、パイプはフォーマットされていないバイト ストリームのみを運ぶことができる、バッファ サイズが制限されているという欠点を克服します。 4. 共有メモリ: 複数のプロセスが同じメモリ空間にアクセスできるようにします。これは利用可能な最も高速な IPC 形式です。他の通信メカニズムの動作効率が低下することを考慮して設計されています。多くの場合、プロセス間の同期と相互排他を実現するために、セマフォなどの他の通信メカニズムと組み合わせて使用されます。 セマフォ: 主にプロセス間および同じプロセスの異なるスレッド間の同期手段として使用されます。 5. ソケット: 異なるマシン間のプロセス間通信に使用できる、より一般的なプロセス間通信メカニズム。元々は Unix システムの BSD ブランチ用に開発されましたが、現在では一般的に他の Unix 系システムにも移植可能です。Linux と System V の両方のバリアントがソケットをサポートしています。
以上がPHP プロセス モデル、プロセス通信方法、プロセス スレッドの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。