複数の場合、同時に、domain/somefile.phpでAjaxjavascriptクエリを実行します。
ここで、somefile.phpはcurlリクエスト(curl_exec)からdomain / somehandlerへの応答を取得し、それらを返す必要があります
Apache2によって並列処理はどのように処理されますか?、ドメイン/ somehandlerで直接Ajaxクエリを実行する場合よりも本当に遅いですか?
説明のためのthx
複数の場合、同時に、domain/somefile.phpでAjaxjavascriptクエリを実行します。
ここで、somefile.phpはcurlリクエスト(curl_exec)からdomain / somehandlerへの応答を取得し、それらを返す必要があります
Apache2によって並列処理はどのように処理されますか?、ドメイン/ somehandlerで直接Ajaxクエリを実行する場合よりも本当に遅いですか?
説明のためのthx
how is handled parallelism by Apache2?
-Apacheに関しては、負荷を処理するのに十分なプロセス/スレッドがないように非常に不適切に構成していない限り、実際の問題はありません。それは何よりもハードウェアリソースとネットワーク帯域幅に関するものです。ここで注意することは、Apacheとは関係がなく、実際にはPHPセッションに関連しています。これについては、以下で説明しますが、最初に...
Is it really slower than if I was doing the Ajax queries directly on domain/somehandler?
-はい、必然的に。これは、トランザクションを完了するために必要なHTTPリクエストの数がすぐに2倍になったためです。また、必要な帯域幅の量と全体的なCPU時間を増やしました。著しく遅くなるかどうか、問題が発生するかどうかは、実行していること、cURLスクリプトの設定方法、2つのバックエンドサーバー間のネットワークリンクの速度などに関する1000の要因によって異なります。 、など..。
PHP駆動型アプリケーションの並行性の問題に関連してここで何度も出てくる質問への答えは、セッションに関連しています。多くのサイトはセッションを使用してユーザーデータ、ログインステータス、あらゆる種類の情報を追跡し、それ自体に問題はありません(ただし、可能な限り回避する必要があり、RESTとは完全に互換性がありません)が、同時実行の問題を引き起こす可能性がありますそれらが正しく処理されていない場合。
これは、PHPがセッションのデータをサーバーのローカルファイルシステム内のファイルに保存するためです。セッションが開いている間、ファイルはロックされ、同時書き込みによるセッションの破損を防ぎます。これは、セッションファイルを利用しようとする2番目のリクエストが、最初のリクエストがセッションファイルのロックを解除するまで「ブロック」(つまり待機)することを意味します。
ほとんどの場合、人々はこれに気づきません。ここで私が見た最も一般的なことは、PHPベースのサーブレットスクリプトを介してファイルのダウンロードを提供しようとしている人々であり、ファイルの送信中はセッションファイルを開いたままにします。これにより、ユーザーはファイルをダウンロードしている間、サイトからページをロードできなくなります。
session_write_close()
セッションデータの処理が終了したらすぐに呼び出すことで、この問題を簡単に回避できます。
...もちろん、セッションを使用していない場合でも、いずれにしても影響はありません。