ホームページ  >  記事  >  バックエンド開発  >  PHPプロセスとスレッドの違い

PHPプロセスとスレッドの違い

(*-*)浩
(*-*)浩オリジナル
2019-09-25 10:22:283535ブラウズ

PHPプロセスとスレッドの違い

プロセス: 狭義では、プロセスは実行中のプログラムのインスタンスですが、広義では、プロセスは特定の独立した機能を持つプログラムです。特定のデータセットのアクティビティを 1 回実行します。 (推奨学習: PHP プログラミングの入門から習熟まで )

これは、オペレーティング システムの動的実行の基本単位です。従来のオペレーティング システムでは、プロセスは基本的な割り当て単位でもあります。そして基本実行ユニット。 (いくつかの単語で要約すると、アクティブ、エンティティ、実行中のプログラム);

スレッド: は、プログラム実行フローの最小単位である軽量プロセスと呼ばれます。は、システムによって独立してスケジュールされ、ディスパッチされる基本単位です。

スレッド自体は基本的にシステム リソースを所有せず、動作に必要な一部のリソース (プログラム カウンタ、レジスタのセット、スタックなど) のみを所有しますが、他のスレッドと共有することができます。同じプロセスに属するプロセスが所有するすべてのリソース (短い言葉で要約すると、軽量、エンティティ、プロセス、最小単位);

差異:

0 ) プロセス CPU リソース割り当ての最小単位であり、スレッドは CPU スケジューリングの最小単位です。

#1) つまり、プログラムには少なくとも 1 つのプロセスがあり、プロセスには少なくとも 1 つのスレッドがあります。

2) スレッドの分割規模はプロセスの分割規模よりも小さいため、マルチスレッド プログラムの同時実行性が高くなります。

3) さらに、プロセスは実行中に独立したメモリ ユニットを持ち、複数のスレッドがメモリを共有するため、プログラムの実行効率が大幅に向上します。

4) 実行中のスレッドとプロセスには違いがあります。それぞれの独立したスレッドには、プログラム実行のエントリ ポイント、順次実行シーケンス、およびプログラムの終了ポイントがあります。ただし、スレッドは独立して実行できず、アプリケーション プログラム内に存在する必要があり、アプリケーション プログラムは複数のスレッドの実行制御を提供します。

5) 論理的な観点から見ると、マルチスレッドの意味は、アプリケーション内で複数の実行部分を同時に実行できることです。ただし、オペレーティング システムは、プロセスのスケジューリング、管理、およびリソース割り当てを実装するために、複数のスレッドを複数の独立したアプリケーションとはみなしません。これがプロセスとスレッドの重要な違いです。

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 のデータ構造は、マルチスレッド状況で共有できます。これは効率の向上にも役立ちます。

マルチプロセスとマルチスレッドの間には、もう 1 つの明らかなモデルの違いがあります。それは、リクエストを処理するときのロジックです。

複数プロセスの場合、FD接続をプロセス間で転送することは困難です。非常に多くのプロセスは通常、親プロセスで listen() を使用し、次に各子プロセスで accept() を使用して負荷分散を実現します。このようなモデルでは群集問題が発生する可能性があります。

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

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

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