ホームページ >バックエンド開発 >PHPチュートリアル >PHP はシングルスレッドですが、大量の http アクセスにどう対処すればよいでしょうか?

PHP はシングルスレッドですが、大量の http アクセスにどう対処すればよいでしょうか?

WBOY
WBOYオリジナル
2016-06-23 13:57:18846ブラウズ

最初は、PHP が Web サイトの構築に使用できることだけを知っていて、PHP のスレッド問題に遭遇したことはありませんでしたが、今日、PHP がシングルスレッドであることを突然知りましたが、Web サイトが PHP で作られていることに突然気づきました。複数の訪問に使用する必要があります。訪問数が多い場合、キューの問題が発生するのではありませんか?
これは本当ですか?それとも、Apache は PHP プログラムを処理するときにサーバーを使用してマルチスレッドを実装するのでしょうか?


ディスカッションへの返信 (解決策)

nginx+php

nginx+php

詳細を教えていただけますか?これは、apache+php がシングルスレッドであることを意味しますか?

nginx+php

確認したところ、apache+php はブロック処理であるのに対し、nginx+php は非同期でノンブロッキングであることが分かりました

http アクセスの処理は Web サーバーの問題であり、何もする必要はありませんdo with php
php Webサーバーのスクリプトとしてのみ表示されます

httpアクセスの処理はWebサーバーの問題であり、phpとは関係ありません
PHPはWebサーバーのスクリプトとしてのみ表示されます

混乱していますが、一般的にphpはシングルスレッドであると言われていますが、Javaのマルチスレッドとは何を意味しますか?ガイドと詳細な説明をお願いします。あまり深く説明する必要はありません

マルチスレッド WEB サーバーを使用して PHP を呼び出すことができます。

PHP にはプロセスマネージャー、fpm fcgi などがあります。 PHP 言語自体にはマルチスレッドがありません。

高い同時実行性に対処するには、nginx またはその他のソフトウェアを負荷分散サービスとして使用します。 PHP レベルでは、gzip 圧縮やキャッシュなどを使用できます。

PHP にはマルチスレッドがないため、コード内で別のスレッドを開いて他のタスクを実行することはできません。ただし、これは Java のように多数のメインライン ロジックを同時に実行することはできません。リクエストは nginx または Apache によって処理され、その後 PHP が呼び出されて処理されるため、スクリプトにアクセスする必要がある多くのプロセスが開きます。各ユーザーはサーバー上の PHP スクリプトのプロセスに対応して実行されます。 その後 (ページが開かれる)、プロセスは破棄され、メモリが解放されます

PHP にはマルチスレッドがないため、別のスレッドを開くことはできません。他のタスクを実行するためのコード。Java のように複数のメインスレッドを同時に実行することはできません。ただし、リクエストは nginx または Apache によって処理されるため、これは大量のアクセスとはほとんど関係がありません。その後、php が処理のために呼び出されます。これにより、スクリプトにアクセスする必要があるプロセスとスレッドがそれぞれ異なります。実行 (ページが開かれる) すると、プロセスが破棄され、メモリが解放されます。


シングルトン モードでは、
if ($instance == null) {
$instance = new instance()
}
これは次の理由によるものでしょうか。サーバーは処理のために複数の PHP スクリプトを呼び出しますが、2 つの呼び出しが同時に行われ、結果として 2 つの新しいインスタンスが生成されます。

php は 1 つのプロセスを処理した後、他のプロセスを処理します。

起動されたすべての PHP インタプリタは互いに独立しています
当然、それらによって解釈される PHP コードも互いに独立しています

いわゆるシングルトンは現在実行中の PHP コードコレクションのみです

個人的な理解では、PHP は A開発言語はスレッドとは何の関係もありません。


PHP にはマルチスレッドがないため、コード内で別のスレッドを開いて他のタスクを実行することはできません。ただし、これは Java とはほとんど関係ありません。リクエストが nginx または Apache によって処理され、その後、処理のために PHP が同時に呼び出される可能性があるため、スクリプトにアクセスする必要がある多くのプロセスが開かれます。各ユーザーはサーバー上の PHP スクリプトに対応します。プロセスが実行された後 (ページが開かれた後)、プロセスは破棄され、メモリが解放されます。

シングルトン モードでは
if($instance ==) null) {
$instance = new instance();
}
この作品 サーバーが処理のために複数の PHP スクリプトを呼び出し、同時に 2 つの呼び出しが行われ、その結果 2 つの新しいインスタンスが作成される可能性があります。

はい、PHP のシングルトン モードは、現在実行中のスクリプトのみを対象とします。また、最初に $instance が空かどうかを確認する必要があることも指摘しました。これは、今回実行されているスクリプトが空ではないという事実にのみ限定されます。複数のオブジェクトが新しいこと
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。