セッション管理とスレッドモデル(ClassicASP編)
結論
複数のセッションの処理はマルチスレッド処理(平行処理)が行われているかもしれないが、同一セッションの内部では処理は一つずつシリアルで処理されているということ。
実験
親のaspでセッションを作成、その後、ko0.aspとko1.aspに対して同時にアクセスされるはずなので、その様子を見てみよう。
oya.asp
<html>
<head>
<frameset rows="50%,*">
<frame src="ko0.asp">
<frame src="ko1.asp">
</frameset>
</head>
</html>
ko0.phpとko1.phpは同じ内容で、10秒間スリープする関数がないので、しばらく無駄な計算をする処理。
そして、インタプリタ/コンパイラに削除されないように無駄な計算結果を画面に表示するという内容
ko0.asp
<%
Dim i
Dim sum
Response.Write("Start is " & Now() & "<br>")
sum = 0.51
For i=0 To 10000000
sum = (1.0 - sum) * sum
Next
Response.Write("sum = " & sum & "<br>")
Response.Write(" End is " & Now() & "<br>")
%>
結果
ko0.asp が処理されてから、ko1.aspが処理されているのがわかる。
つまり
同一セッションで大量にアクセスしても・・・早く終わるわけではない、ということ
考えてみたら・・・
Sessionオブジェクトに複数スレッドから同時アクセスを制御するようなロック処理がないのだから当然といえば当然か・・・
(ちなみにApplicationオブジェクトにはLockとUnLockがあるよ)
参考 : Applicationオブジェクトのlockメソッド