- - PR -
クライアントより複数の要求が来た場合の動作について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-05-10 16:28
お世話になります。
ASP.NETでWebアプリを開発しております。 同一セッション内で、クライアントより複数の要求が来た場合、 内部的には、マルチスレッドで動作していると思われるのに、 並列動作しません。 例えば、子画面においてサーバサイドで時間のかかる処理を行っている場合、 親画面での、ポストバック処理などが子画面の処理が完了するまで 走らなくなってしまいます。 別セッションの場合は、問題なく並列動作します。 同一セッションの場合のみ、何か制限が掛かっているのでしょうか? そうであれば、制限を外す事などは可能でしょうか? ご教授いただければと思います。 ■環境 Windows Server 2003 IIS 6.0 VisualStudio.NET 2003 Webアプリ(C#) | ||||
|
投稿日時: 2006-05-10 16:40
書いたことが無いのであまり詳しくないのですが・・・
時間のかかる処理がタイムシュアリングの邪魔をすることがあるのですが、そういう 可能性は無いんでしょうか? | ||||
|
投稿日時: 2006-05-10 16:56
私もそれを疑って、CPU使用率を下げるように適当にスリープを入れてみたのですが、効果ありませんでした。
少なくとも、Page_Load()や各イベントハンドラを抜けるまでは、次のスレッドが動作しないように思えます。 | ||||
|
投稿日時: 2006-05-10 17:05
時間がかかる処理の結果をセッション変数にいれようとしてるためにセッション変数がその処理の間ロックされてて、親画面のほうでも同じセッション変数を使おうとしてて順番待ちになってる、なんてことはないですか?
#いや、本当にそう動くかどうか試してないのでわかりませんが。。。 | ||||
|
投稿日時: 2006-05-10 17:05
global.asaxでASP.NETランタイムの処理を見張ってみると
同一セッションで時間の処理を行ってるいる場合 Application_ResolveRequestCacheイベントは発生しますが Application_AcquireRequestStateイベントは時間のかかる処理が終了しないと発生しません。 おそらくセッション情報を復元するSessionStateModuleとやらが、同一セッションのスレッドが動作してないかチェックして、動作しているようだったらスレッドが終了するまで待っているのではないでしょうか? そうしないと、複数のスレッドが同一セッションに書込み、読込みを行った場合に同期処理が大変だからのような気もします。 「.NET エンタープライズWebアプリケーション開発技術大全Vol3」 によると、SessionStateModuleなどを独自に開発することは理論上可能なようですが、難易度が高くオススメできないそうです。 [ メッセージ編集済み 編集者: burton999 編集日時 2006-05-10 17:06 ] | ||||
|
投稿日時: 2006-05-10 17:28
仕様だったはずです。 同一のセッションは同一のスレッドで動作するようになっていたはずです。 制約を外すことは多分できないと思います。 ※カスタムのセッション管理機能を作成したりしない限り。 | ||||
|
投稿日時: 2006-05-10 17:36
皆様、情報提供ありがとうごさいます。
同一セッションで、HTTPの要求は一つずつしか処理できないという事でしょうか。 自作のスレッドは同一セッション内で並列動作するので(セッション変数は自力でロックをかけています)、"HTTP要求は一つずつ処理が仕様"と考えるのが妥当のようです。 | ||||
|
投稿日時: 2006-05-13 21:53
デバッグ構成(web.config)だと、シングル スレッドになるんじゃなかったっけ?
1.x のドキュメントが、見つからない。。。
[ メッセージ編集済み 編集者: Jitta 編集日時 2006-05-13 22:03 ] |