ホームページ >バックエンド開発 >PHPの問題 >php はマルチスレッドですか、それともシングルスレッドですか?

php はマルチスレッドですか、それともシングルスレッドですか?

(*-*)浩
(*-*)浩オリジナル
2019-09-18 11:42:585949ブラウズ

PHP の設計が始まってから普及するまで、それを解決するためにマルチスレッドを使用する必要性は明らかではありませんでした。

php はマルチスレッドですか、それともシングルスレッドですか?

#マルチスレッドが必要な場合には、対応するソリューションと代替手段もあります。マルチスレッドが常にシングルスレッドより優れているわけではなく、マルチスレッドによって別の問題が発生する可能性があります (たとえば、2 つのスレッドがクラス内の同じメソッドを同時に呼び出すとデッドロックが発生する可能性があります)。 (推奨学習:

PHP プログラミング入門から習熟まで )

顧客からのページリクエスト処理に対応する PHP がシングルスレッドで処理されることが理解でき、次のステップはコード内のビジネス ロジックを編集/理解することですが、PHP は同時に多くのスレッドを開いて、多くのユーザーから要求された同じ PHP を処理できるため、PHP は「マルチネジ付き」。


各 PHP ファイルの実行はシングルスレッドですが、サーバー (apache/nigix/php-fpm) はマルチスレッドです。特定の PHP ファイルがサーバーによってアクセスされるたびに、対応する PHP ファイルを実行するための新しいプロセス/スレッドが作成されます。


つまり、PHP は 1 つのリクエストに対してシングルスレッドですが、複数のリクエストは同時に処理されます。


実際、一般に PHP プログラムを作成する場合、それはシングルスレッドであると見なされます。複数のリクエスト間の関係により、データベース、ファイル、セッションなどの読み取りと書き込みがロックされる場合があり、これにより後続のリクエストがハングし、前のリクエストが完了するまで待機してから続行されます。


#コルーチンに関しては、新しいプログラムの実行処理(古いものはシーケンス、判定、ループ)としか言えず、その本質もシングルスレッドです


つまり、正確に言うと、PHP はシングルスレッドであり、ある程度までは「マルチスレッド」とみなすこともできます。

! !

PHP マルチスレッド

デフォルトでは、PHP はマルチスレッドをサポートしていません。マルチスレッドを使用するには、拡張機能をインストールする必要があります。 , 一般的に使用される拡張機能には、 pcnlt 、 POSIX、 pthreads などがありますが、最もよく使用される拡張機能は pthreads 拡張機能です。これは、マルチスレッドをサポートするために、パラメータを使用して PHP のコンパイル時にスレッドセーフな方法を指定します。スレッドを使用する場合は、まずスレッドを考慮する必要があります。 セキュリティの問題。スレッド セーフティとは、関数または関数ライブラリがマルチスレッド環境で呼び出されたときに、複数のスレッド間で共有変数を正しく処理できるため、プログラムの関数が

PHP はスレッド セーフを実現します

PHP は主に TSRM メカニズムを通じてスレッド セーフを実現します。このメカニズムを通じて、グローバル変数と静的変数を分離でき、グローバル変数と静的変数のコピーを各スレッドにコピーできます。各スレッドはメインスレッドのバックアップを使用します。これにより、変数の競合が回避され、スレッドの安全性の問題が発生しなくなります。 PHP のマルチスレッドのカプセル化によりスレッドの安全性が保証されるため、開発者は読み取りと書き込みの競合を考慮する必要がなく、コードの安全性も高まります。ただし、これには欠点もあります。たとえば、サブスレッドが実行を開始すると、メインスレッドはサブスレッドの実行の詳細を調整できなくなり、メッセージを配信できなくなります

以上がphp はマルチスレッドですか、それともシングルスレッドですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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