セッション管理とスレッドモデル(PHP編)
結論
複数のセッションの処理はマルチスレッド処理(平行処理)が行われているかもしれないが、同一セッションの内部では処理は一つずつシリアルで処理されているということ。
実験
親のphpでセッションを作成、その後、ko0.phpとko1.phpに対して同時にアクセスされるはずなので、その様子を見てみよう。
oya.php
<?php
echo "<html><head><body>";
echo "SessionId is ";
echo session_id();
echo "<br><hr>\n";
echo "<iframe src=\"ko0.php\"></iframe><br>";
echo "<hr>\n";
echo "<iframe src=\"ko1.php\"></iframe><br>\n";
echo "</body></html>";
?>
ko0.phpとko1.phpは同じ内容で、10秒間スリープするだけの処理
ko0.php
<?php
echo "SessionID is ";
echo session_id();
echo "<br>\n";
echo "start is ";
echo date("H:i:s");
echo "<br>\n";
sleep(10);
echo " end is ";
echo date("H:i:s");
echo "<br>\n";
phpinfo();
?>
結果
ko0.php が処理されてから、ko1.phpが処理されているのがわかる。
つまり・・・
同一セッションで大量にアクセスしても・・・早く終わるわけではない、ということ
考えてみたら・・・
セッション・オブジェクトに複数スレッドから同時アクセスを制御するようなロック処理がないのだから当然といえば当然か・・・