検索
ホームページバックエンド開発PHPチュートリアルPHP 面接の質問 1: スレッドとプロセスの違い (ちなみにコルーチンについて言及されています)

この記事では、PHP インタビューの質問 1 でスレッドとプロセスの違いを紹介しています (ちなみに、コルーチンについても言及しています)。必要な友人にそれを共有します

1。プロセスとは


プロセスとは、プログラム実行の インスタンス であり、CPU やメモリ などのリソースに割り当てることができます。プロセスには通常、命令セットとシステム リソースが含まれます。ここで、命令セットはコードであり、システム リソースは CPU、メモリ、I/O などを指します。

プロセスは、データセット内のプログラムの動的実行プロセスであり、「実行中のプログラム」として理解できます。これは、CPU リソースの割り当てとスケジューリングの独立した単位です。
プロセスは通常、プログラム、データセット、プロセス制御ブロックで構成されます。作成するプログラムは、プロセスが完了する必要がある機能とその完了方法を記述するために使用されます。データセットは、プログラムが実行中に使用する必要があるリソースです。プロセス制御ブロックは、プロセスの外部特性を記録するために使用されます。 、プロセスの実行変更プロセスを記述し、プロセスの制御と管理に使用できます。これは、システムがプロセスの存在を感知する唯一の兆候です。
プロセスの制限は、作成、キャンセル、切り替えのオーバーヘッドが比較的高いことです。

2. スレッドとは

スレッドはプロセスの実行フローであり、プロセスの一部であり、プロセスとは独立して実行されます。
説明: プロセスには 2 つの特性があります。1 つはリソースの所有権であり、もう 1 つは実行のスケジュール (命令セット) です。スレッドは実行のスケジュールの一部であり、プログラム実行フローとも呼ばれるプロセス実行のパスを指します。スレッドは軽量プロセスと呼ばれることもあります。

スレッドはプロセスの後に開発される概念です。 スレッドは軽量プロセスとも呼ばれ、CPU の基本的な実行単位であり、スレッド ID、プログラム カウンタ、レジスタ セット、スタックで構成されます。プロセスには複数のスレッドを含めることができます。 スレッドの利点は、プログラムの同時実行のオーバーヘッドが軽減され、オペレーティング システムの同時実行パフォーマンスが向上することです。欠点は、スレッドが独自のシステム リソースを持たず、実行時に必要なリソースのみを持つことです。同じプロセスのスレッドは、プロセスが所有するシステム リソースを共有できます。プロセスをワークショップに例えると、スレッドはワークショップのワーカーに似ています。ただし、一部の排他リソースにはロック機構があり、扱いを誤ると「デッドロック」が発生する可能性があります。
3. コルーチンとは何ですか? コルーチンは、マイクロスレッドとも呼ばれるユーザー モードの軽量スレッドであり、コルーチンのスケジュールはユーザーによって完全に制御されます。人々は通常、

コルーチンとサブルーチン

(関数)を比較します。

サブルーチン呼び出しには必ず入口があり、一度終了するとサブルーチンの実行が完了します。

コルーチンの開始はコルーチンの最初のエントリ ポイントであり、リターン ポイントの後には次のエントリ ポイントがあります。 Python では、コルーチンは、yield を通じて他のコルーチンを呼び出すことができます。 yield メソッドによって実行権を譲渡するコルーチン間の関係は、呼び出し元と呼び出し先の関係ではなく、互いに対称かつ対等であり、相互に連携してタスクを完了します。その操作の一般的なプロセスは次のとおりです: 最初のステップでは、コルーチン A の実行が開始されます。 2 番目のステップでは、コルーチン A が途中で実行され、一時停止に入ります。実行権は、yield コマンドによってコルーチン B に移されます。
3 番目のステップ: (一定期間後) コルーチン B は実行権限を返します。
ステップ 4: コルーチン A が実行を再開します。

コルーチンの特徴は、マルチスレッドと比較して、1 つのスレッドで実行されることです。
*
コルーチンの

実行効率は非常に高いです

。サブルーチンの切り替えはスレッドの切り替えではなく、プログラム自体によって制御されるため、スレッドの切り替えによるオーバーヘッドはありません。マルチスレッドと比較して、スレッドの数が増えるほど、コルーチンのパフォーマンス上の利点がより顕著になります。
* コルーチンにはマルチスレッドのロック機構は必要ありません。コルーチン内の共有リソースをロックする必要はなく、ステータスを確認するだけで済みます。 ヒント: マルチコア CPU を使用する最も簡単な方法は、マルチプロセス + コルーチンです。これは、マルチコアを最大限に活用するだけでなく、コルーチンの高効率を最大限に発揮し、非常に高いパフォーマンスを得ることができます。
4. プロセスとスレッドの関係

プロセスは土地 (システム リソース) を持つ家主のようなもので、スレッドはテナント (スレッド、ファーミング プロセスを実行する) のようなものです。各家主 (プロセス) には、動作中のテナント (スレッド) が 1 つだけ必要です。

プロセス - リソース割り当ての最小単位であり、比較的堅牢であり、クラッシュは通常、他のプロセスに影響を与えませんが、プロセスの切り替えはリソースを消費し、効率が低下します。

スレッド - プログラム実行の最小単位。独立したアドレス空間はありません。1 つのスレッドが停止するとプロセス全体が停止する可能性がありますが、リソースが節約され、スイッチング効率が高くなります。

5. PHP プログラミングにおける一般的なプロセスとスレッド

1. Web アプリケーションでは、PHP にアクセスするたびに PHP プロセスが作成されます、もちろん、少なくとも 1 つの PHP スレッドも作成されます。 2. PHP はマルチプロセス プログラミングに
pcntl を使用します 3. PHP はマルチスレッド プログラミングに
pthreads を使用します それぞれのスレッドは
複数の顧客の アクセスを処理できます 5. php-fpm は マルチプロセス モデル を使用します。各プロセス
には 1 つのスレッドしかなく、各スレッド は 1 つのクライアント アクセス しか処理できません。 6. Apache は、使用される SAPI に応じて、マルチプロセス モデルまたはマルチスレッド モデルを使用します。7. プロセスは CPU リソース割り当ての最小単位です。 CPU スケジューリング

、プロセスとは プロセスとは、プログラム実行のインスタンス

であり、

CPUやメモリ

などのリソースに割り当てることができます。プロセスには通常、

命令セットとシステム リソースが含まれます。ここで、命令セットはコードであり、システム リソースは CPU、メモリ、I/O などを指します。 プロセスは、データセット内のプログラムの動的実行プロセスであり、単に 「実行中のプログラム」 として理解できます。これは、CPU リソースの割り当てとスケジューリングの独立した単位です。 プロセスは通常、

プログラム、データセット、プロセス制御ブロック

で構成されます。作成するプログラムは、プロセスが完了する必要がある機能とその完了方法を記述するために使用されます。データセットは、プログラムが実行中に使用する必要があるリソースです。プロセス制御ブロックは、プロセスの外部特性を記録するために使用されます。 、プロセスの実行変更プロセスを記述し、プロセスの制御と管理に使用できます。これは、システムがプロセスの存在を感知する唯一の兆候です。 プロセスの制限は、作成、キャンセル、切り替えのオーバーヘッドが比較的高いことです。
2. スレッドとは スレッドはプロセスの実行フローであり、プロセスの一部であり、プロセスとは独立して実行されます。
説明: プロセスには 2 つの特性があります。1 つはリソースの所有権であり、もう 1 つは実行のスケジュール (命令セット) です。スレッドは実行のスケジュールの一部であり、プログラム実行フローとも呼ばれるプロセス実行のパスを指します。スレッドは軽量プロセスと呼ばれることもあります。

スレッドはプロセスの後に開発される概念です。 スレッドは軽量プロセスとも呼ばれ、CPU の基本的な実行単位であり、スレッド ID、プログラム カウンタ、レジスタ セット、スタックで構成されます。プロセスには複数のスレッドを含めることができます。

スレッドの利点は、プログラムの同時実行のオーバーヘッドが軽減され、オペレーティング システムの同時実行パフォーマンスが向上することです。欠点は、スレッドが独自のシステム リソースを持たず、実行時に必要なリソースのみを持つことです。同じプロセスのスレッドは、プロセスが所有するシステム リソースを共有できます。プロセスをワークショップに例えると、スレッドはワークショップのワーカーに似ています。ただし、一部の排他リソースにはロック機構があり、扱いを誤ると「デッドロック」が発生する可能性があります。


3. コルーチンとは何ですか? コルーチンは、マイクロスレッドとも呼ばれるユーザー モードの軽量スレッドであり、コルーチンのスケジュールはユーザーによって完全に制御されます。人々は通常、

コルーチンとサブルーチン

(関数)を比較します。 サブルーチン呼び出しには必ず入口があり、一度終了するとサブルーチンの実行が完了します。 コルーチンの開始はコルーチンの最初のエントリ ポイントであり、リターン ポイントは次のエントリ ポイントです。 Python では、コルーチンは、yield を通じて他のコルーチンを呼び出すことができます。 yield メソッドによって実行権を譲渡するコルーチン間の関係は、呼び出し元と呼び出し先の関係ではなく、互いに対称的かつ対等であり、相互に連携してタスクを完了します。その操作の一般的なプロセスは次のとおりです:
最初のステップでは、コルーチン A の実行が開始されます。

2 番目のステップでは、コルーチン A が途中で実行され、一時停止に入ります。実行権は、yield コマンドによってコルーチン B に移されます。

3 番目のステップ: (一定期間後) コルーチン B は実行権限を返します。

ステップ 4: コルーチン A が実行を再開します。

コルーチンの特徴は、マルチスレッドと比較して、1 つのスレッドで実行されることです。*
コルーチンの
実行効率は非常に高いです
。サブルーチンの切り替えはスレッドの切り替えではなく、プログラム自体によって制御されるため、スレッドの切り替えによるオーバーヘッドはありません。マルチスレッドと比較して、スレッドの数が増えるほど、コルーチンのパフォーマンス上の利点がより顕著になります。
* コルーチンにはマルチスレッドのロック機構は必要ありません。コルーチン内の共有リソースをロックする必要はなく、ステータスを確認するだけで済みます。
ヒント: マルチコア CPU を使用する最も簡単な方法は、マルチプロセス + コルーチンです。これは、マルチコアを最大限に活用するだけでなく、コルーチンの高効率を最大限に発揮し、非常に高いパフォーマンスを得ることができます。

4. プロセスとスレッドの関係

プロセスは土地 (システム リソース) を持つ家主のようなもので、スレッドはテナント (スレッド、ファーミング プロセスを実行する) のようなものです。各家主 (プロセス) には、動作するテナント (スレッド) が 1 つだけ必要です。
プロセス - リソース割り当ての最小単位であり、比較的堅牢であり、クラッシュは通常、他のプロセスに影響を与えませんが、プロセスの切り替えはリソースを消費し、効率が低下します。
スレッド - プログラム実行の最小単位。独立したアドレス空間はありません。1 つのスレッドが停止するとプロセス全体が停止する可能性がありますが、リソースが節約され、スイッチング効率が高くなります。

5. PHP プログラミングにおける一般的なプロセスとスレッド

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 サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPでの依存関係注射:一般的な落とし穴の回避PHPでの依存関係注射:一般的な落とし穴の回避May 16, 2025 am 12:17 AM

依存関係の指示(di)inphpenhancesscodeflexibility andtestability bydecouplingdepensitycreation fromusage.toemplementdiefectivilly:1)sudiconticainersichyloiavoidovedovedineriering.2)回避装置の回避装置loadbylimitingdencedentotheeorfour.3)adhe

PHP Webサイトをスピードアップする方法:パフォーマンスチューニングPHP Webサイトをスピードアップする方法:パフォーマンスチューニングMay 16, 2025 am 12:12 AM

toimproveyourphpwebsite'sperformance、usethesestrategies:1)codecaching withop cachetospeedupscriptscriptintertention.2)最適化策を選択することを最適化してください

PHPで大量の電子メールを送信する:可能ですか?PHPで大量の電子メールを送信する:可能ですか?May 16, 2025 am 12:10 AM

はい、itispossibletosendmassemailswithphp.1)uselibrarieslikephpmailerorsforfienceemailsending.2)vetseemailstoavoidspamflags.3)emorizeemailsusingdynamicconttoimbroveengagemention.

PHPの依存噴射の目的は何ですか?PHPの依存噴射の目的は何ですか?May 16, 2025 am 12:10 AM

依存関係の指示(di)inphpisadesignpatterntativevevesion ofコントロール(IOC)は、依存性を依存していることによって、微分化された誘惑を依存させ、微分、テスト可能性、および柔軟性を高めることができます

PHPを使用して電子メールを送信する方法は?PHPを使用して電子メールを送信する方法は?May 16, 2025 am 12:03 AM

PHPを使用して電子メールを送信する最良の方法は次のとおりです。1。PHPのMail()関数を基本送信に使用します。 2。phpmailerライブラリを使用して、より複雑なHTMLメールを送信します。 3. SendGridなどのトランザクションメールサービスを使用して、信頼性と分析機能を改善します。これらの方法を使用すると、電子メールが受信トレイに届くだけでなく、受信者を引き付けることもできます。

PHP多次元アレイの要素の総数を計算する方法は?PHP多次元アレイの要素の総数を計算する方法は?May 15, 2025 pm 09:00 PM

PHP多次元アレイの要素の総数を計算することは、再帰的または反復的な方法を使用して行うことができます。 1.再帰的な方法は、アレイを通過し、ネストされた配列を再帰的に処理することによりカウントされます。 2。反復法は、スタックを使用して再帰をシミュレートして深さの問題を回避します。 3. array_walk_recursive関数も実装できますが、手動でカウントする必要があります。

PHPのDo-While Loopsの特徴は何ですか?PHPのDo-While Loopsの特徴は何ですか?May 15, 2025 pm 08:57 PM

PHPでは、ループの特性は、ループ本体が少なくとも1回実行されることを確認し、条件に基づいてループを続行するかどうかを決定することです。 1)条件付きチェックの前にループ本体を実行します。これは、ユーザー入力検証やメニューシステムなど、操作を少なくとも1回実行する必要があるシナリオに適しています。 2)ただし、do-whileループの構文は、初心者間の混乱を引き起こす可能性があり、不要なパフォーマンスオーバーヘッドを追加する可能性があります。

PHPで弦をハッシュする方法は?PHPで弦をハッシュする方法は?May 15, 2025 pm 08:54 PM

PHPの効率的なハッシュ文字列は、次の方法を使用できます。1。MD5関数を使用して高速ハッシュを使用しますが、パスワードストレージには適していません。 2。SHA256関数を使用して、セキュリティを改善します。 3. password_hash関数を使用してパスワードを処理して、最高のセキュリティと利便性を提供します。

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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

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

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境