2011-07-12 8 views
1

PHP、マルチスレッドその他の疑問

私はPHPの仕組みについて疑問を抱いています。

は、私たちがインストールされ、PHP + Apacheで1つのサーバーを持っていると仮定することができます:それは行くので、ここで)

を、私はスタックをヒットすると思ったので、私は本のどこにでも答えを見つける傾けます。ここに私の信念があります:

1 - phpは一度に1つのリクエストを処理できます。最終的に呼び出されたPHPインタプリタがシングルスレッドであるため、一度に複数のスレッドを処理できるかどうかは関係ありません。

2 - 信念1から、サーバが同じ時間に4回のコールを受信した場合、これらのコールがキューに入れられ、1度に1つずつ実行されると考えられます。最後に要求を行うのは、応答を最後に得ます。

3 - 1から2までは、重い持ち上げ/時間のかかるものを実行するスクリプトに対応するURLをcron-callすると、スクリプトが戻るまでにサーバーが遅くなることがあります。

何が偽ですか?

歓声

+0

PHPに関するランダムなクレイジー仮説をダンピングしていますか、それとも実際にどこかでそれを読んだことはありますか? –

+0

私たちの答えは受け入れられません:-( – Nemoden

+0

'requests'と' threads'を混同しないでください... –

答えて

0

PHPが複数のリクエストを同時に処理できない理由はありません。つまり、スクリプトのタイプに応じて、単一クライアントの要求を処理するためにsemi-trueになる可能性があります。

多くのスクリプトはセッションを使用します。 session_start()が呼び出されると、セッションが開かれ、がロックされてにロックされます。スクリプトの実行が終了すると、セッションは閉じられ、はロックされていません(これは手動で行うことができます)。同じセッションに対する複数の要求がある場合、最初の要求が開き、セッションがロックされ、2番目の要求はセッションがロック解除されるまで待機する必要があります。これは、複数のPHPスクリプトを同時に実行できないという印象を与えるかもしれませんが、同じセッションを使用するリクエスト(つまり、同じブラウザからのリクエスト)に対してのみ(部分的に)真実です。 2つのクライアント(ブラウザ)からの要求は、他の要求でロック/ロック解除されているリソース(ファイル、DBテーブルなど)を使用しない限り、並行して処理できます。

+0

私はスレッド開発者が書くスレッドの中で混乱していると思います(言語のマルチスレッド化はありません)。 )とインタプリタレベルのスレッドが含まれています。インタプリタは多分、複数のインスタンスになる可能性がありますが、それは別の話です。 – nourdine

1

私の水晶玉あなたはPHPのセッションを使用していて、同時要求(アイフレームまたはAJAXのいずれか)キューに入れられたばかりを持っていることを示唆しています。問題は、デフォルトのセッションハンドラがファイルを使用し、session_start()がデータファイルをロックすることです。セッションデータをすばやく読み取ってから、session_write_close()に電話してファイルを解放する必要があります。

+0

時々、リクエストの途中で '$ _SESSION'を変更する必要があります。 – binaryLV