この記事では、PHP インタビューの質問 1 でスレッドとプロセスの違いを紹介しています (ちなみに、コルーチンについても言及しています)。必要な友人にそれを共有します
プロセスとは、プログラム実行の インスタンス であり、CPU やメモリ などのリソースに割り当てることができます。プロセスには通常、命令セットとシステム リソースが含まれます。ここで、命令セットはコードであり、システム リソースは CPU、メモリ、I/O などを指します。
プロセスは、データセット内のプログラムの動的実行プロセスであり、「実行中のプログラム」として理解できます。これは、CPU リソースの割り当てとスケジューリングの独立した単位です。
プロセスは通常、プログラム、データセット、プロセス制御ブロックで構成されます。作成するプログラムは、プロセスが完了する必要がある機能とその完了方法を記述するために使用されます。データセットは、プログラムが実行中に使用する必要があるリソースです。プロセス制御ブロックは、プロセスの外部特性を記録するために使用されます。 、プロセスの実行変更プロセスを記述し、プロセスの制御と管理に使用できます。これは、システムがプロセスの存在を感知する唯一の兆候です。
プロセスの制限は、作成、キャンセル、切り替えのオーバーヘッドが比較的高いことです。
スレッドはプロセスの実行フローであり、プロセスの一部であり、プロセスとは独立して実行されます。
説明: プロセスには 2 つの特性があります。1 つはリソースの所有権であり、もう 1 つは実行のスケジュール (命令セット) です。スレッドは実行のスケジュールの一部であり、プログラム実行フローとも呼ばれるプロセス実行のパスを指します。スレッドは軽量プロセスと呼ばれることもあります。
スレッドはプロセスの後に開発される概念です。 スレッドは軽量プロセスとも呼ばれ、CPU の基本的な実行単位であり、スレッド ID、プログラム カウンタ、レジスタ セット、スタックで構成されます。プロセスには複数のスレッドを含めることができます。 スレッドの利点は、プログラムの同時実行のオーバーヘッドが軽減され、オペレーティング システムの同時実行パフォーマンスが向上することです。欠点は、スレッドが独自のシステム リソースを持たず、実行時に必要なリソースのみを持つことです。同じプロセスのスレッドは、プロセスが所有するシステム リソースを共有できます。プロセスをワークショップに例えると、スレッドはワークショップのワーカーに似ています。ただし、一部の排他リソースにはロック機構があり、扱いを誤ると「デッドロック」が発生する可能性があります。
3. コルーチンとは何ですか? コルーチンは、マイクロスレッドとも呼ばれるユーザー モードの軽量スレッドであり、コルーチンのスケジュールはユーザーによって完全に制御されます。人々は通常、
コルーチンの開始はコルーチンの最初のエントリ ポイントであり、リターン ポイントの後には次のエントリ ポイントがあります。 Python では、コルーチンは、yield を通じて他のコルーチンを呼び出すことができます。 yield メソッドによって実行権を譲渡するコルーチン間の関係は、呼び出し元と呼び出し先の関係ではなく、互いに対称かつ対等であり、相互に連携してタスクを完了します。その操作の一般的なプロセスは次のとおりです: 最初のステップでは、コルーチン A の実行が開始されます。 2 番目のステップでは、コルーチン A が途中で実行され、一時停止に入ります。実行権は、yield コマンドによってコルーチン B に移されます。
3 番目のステップ: (一定期間後) コルーチン B は実行権限を返します。
ステップ 4: コルーチン A が実行を再開します。
コルーチンの特徴は、マルチスレッドと比較して、1 つのスレッドで実行されることです。
*
コルーチンの
。サブルーチンの切り替えはスレッドの切り替えではなく、プログラム自体によって制御されるため、スレッドの切り替えによるオーバーヘッドはありません。マルチスレッドと比較して、スレッドの数が増えるほど、コルーチンのパフォーマンス上の利点がより顕著になります。
* コルーチンにはマルチスレッドのロック機構は必要ありません。コルーチン内の共有リソースをロックする必要はなく、ステータスを確認するだけで済みます。 ヒント: マルチコア CPU を使用する最も簡単な方法は、マルチプロセス + コルーチンです。これは、マルチコアを最大限に活用するだけでなく、コルーチンの高効率を最大限に発揮し、非常に高いパフォーマンスを得ることができます。
4. プロセスとスレッドの関係
1. Web アプリケーションでは、PHP にアクセスするたびに PHP プロセスが作成されます、もちろん、少なくとも 1 つの PHP スレッドも作成されます。 2. PHP はマルチプロセス プログラミングに
pcntl を使用します 3. PHP はマルチスレッド プログラミングに
pthreads を使用します それぞれのスレッドは
複数の顧客の アクセスを処理できます 5. php-fpm は マルチプロセス モデル を使用します。各プロセス
には 1 つのスレッドしかなく、各スレッド は 1 つのクライアント アクセス しか処理できません。 6. Apache は、使用される SAPI に応じて、マルチプロセス モデルまたはマルチスレッド モデルを使用します。7. プロセスは CPU リソース割り当ての最小単位です。 CPU スケジューリング
、プロセスとは プロセスとは、プログラム実行のインスタンス
命令セットとシステム リソースが含まれます。ここで、命令セットはコードであり、システム リソースは CPU、メモリ、I/O などを指します。 プロセスは、データセット内のプログラムの動的実行プロセスであり、単に 「実行中のプログラム」 として理解できます。これは、CPU リソースの割り当てとスケジューリングの独立した単位です。 プロセスは通常、
プログラム、データセット、プロセス制御ブロックで構成されます。作成するプログラムは、プロセスが完了する必要がある機能とその完了方法を記述するために使用されます。データセットは、プログラムが実行中に使用する必要があるリソースです。プロセス制御ブロックは、プロセスの外部特性を記録するために使用されます。 、プロセスの実行変更プロセスを記述し、プロセスの制御と管理に使用できます。これは、システムがプロセスの存在を感知する唯一の兆候です。 プロセスの制限は、作成、キャンセル、切り替えのオーバーヘッドが比較的高いことです。
2. スレッドとは スレッドはプロセスの実行フローであり、プロセスの一部であり、プロセスとは独立して実行されます。
説明: プロセスには 2 つの特性があります。1 つはリソースの所有権であり、もう 1 つは実行のスケジュール (命令セット) です。スレッドは実行のスケジュールの一部であり、プログラム実行フローとも呼ばれるプロセス実行のパスを指します。スレッドは軽量プロセスと呼ばれることもあります。
3. コルーチンとは何ですか? コルーチンは、マイクロスレッドとも呼ばれるユーザー モードの軽量スレッドであり、コルーチンのスケジュールはユーザーによって完全に制御されます。人々は通常、
(関数)を比較します。 サブルーチン呼び出しには必ず入口があり、一度終了するとサブルーチンの実行が完了します。 コルーチンの開始はコルーチンの最初のエントリ ポイントであり、リターン ポイントは次のエントリ ポイントです。 Python では、コルーチンは、yield を通じて他のコルーチンを呼び出すことができます。 yield メソッドによって実行権を譲渡するコルーチン間の関係は、呼び出し元と呼び出し先の関係ではなく、互いに対称的かつ対等であり、相互に連携してタスクを完了します。その操作の一般的なプロセスは次のとおりです:
最初のステップでは、コルーチン A の実行が開始されます。
コルーチンの特徴は、マルチスレッドと比較して、1 つのスレッドで実行されることです。*
コルーチンの
実行効率は非常に高いです
。サブルーチンの切り替えはスレッドの切り替えではなく、プログラム自体によって制御されるため、スレッドの切り替えによるオーバーヘッドはありません。マルチスレッドと比較して、スレッドの数が増えるほど、コルーチンのパフォーマンス上の利点がより顕著になります。
* コルーチンにはマルチスレッドのロック機構は必要ありません。コルーチン内の共有リソースをロックする必要はなく、ステータスを確認するだけで済みます。
ヒント: マルチコア CPU を使用する最も簡単な方法は、マルチプロセス + コルーチンです。これは、マルチコアを最大限に活用するだけでなく、コルーチンの高効率を最大限に発揮し、非常に高いパフォーマンスを得ることができます。
プロセスは土地 (システム リソース) を持つ家主のようなもので、スレッドはテナント (スレッド、ファーミング プロセスを実行する) のようなものです。各家主 (プロセス) には、動作するテナント (スレッド) が 1 つだけ必要です。
プロセス - リソース割り当ての最小単位であり、比較的堅牢であり、クラッシュは通常、他のプロセスに影響を与えませんが、プロセスの切り替えはリソースを消費し、効率が低下します。
スレッド - プログラム実行の最小単位。独立したアドレス空間はありません。1 つのスレッドが停止するとプロセス全体が停止する可能性がありますが、リソースが節約され、スイッチング効率が高くなります。
1. Web アプリケーションでは、PHP にアクセスするたびに PHP プロセス が作成され、もちろん、少なくとも 1 つの PHP スレッドも作成されます。 2. PHP はマルチプロセス プログラミングに
pcntl を使用します 3. PHP はマルチスレッド プログラミングに
pthreads を使用します それぞれのスレッドは
複数の顧客の アクセスを処理できます 5. php-fpm は マルチプロセス モデル を使用します。各プロセス
には 1 つのスレッドしかなく、各スレッド は 1 つのクライアント アクセス しか処理できません。 6. Apache は、使用される SAPI に応じて、マルチプロセス モデルまたはマルチスレッド モデルを使用します。7. プロセスは cpu リソース割り当ての最小単位であり、スレッドは cpu スケジューリングの最小単位です。
関連のおすすめ: PHPの面接で聞かれる可能性のある技術的な質問のまとめ
以上がPHP 面接の質問 1: スレッドとプロセスの違い (ちなみにコルーチンについて言及されています)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。