2

Web アプリケーションの並行性が実際にどのように機能するのか疑問に思っています。私はいくつかの記事を読みましたが、HttpApplication の複数のインスタンスが同時に動作することを理解しています。ここで、同時実行性をテストするための簡単な Web アプリを作成し、global.asax に次のコードを追加しました。

protected void Application_BeginRequest(object sender, EventArgs e)
{
    Response.Write("Request started: " + DateTime.Now);
    System.Threading.Thread.Sleep(10000);
    Response.Write("<br />");
    Response.Write("Request ended: " + DateTime.Now);
    Response.End();
}

ほぼ同時にいくつかのブラウザー タブで Web アプリのルートを参照すると、それらが同時に開始および停止することを期待していました。しかし、そうではないようです。2 番目のタブの開始時間は、最初の時間の終了時間と同じです。次に、この同じコードを httpmodule または default.aspx page_load に配置してテストしたところ、同じ結果が得られました。

ここで何が起こっているのですか?リクエストが並行して処理されないのはなぜですか?

編集:私は主に2つの記事に理解を置いています:

http://msdn.microsoft.com/en-us/magazine/cc188942.aspxには、「同じアプリケーションを対象とする複数の要求が同時に到着した場合、複数の HttpApplication オブジェクトが使用される」と記載されています。

http://www.code-magazine.com/article.aspx?quickid=0511061&page=5には、基本的に私がテストしたことを実行する aspx ページの例があり、「遅いリクエストをシミュレートして、複数のリクエストを並べて表示できるようにする」というコメントが付いています。 ." Thread.Sleep 呼び出しの横

私は何かを完全に誤解している可能性があります.しかし、何ですか?

http://www.code-magazine.com/article.aspx?quickid=0511061&page=5

4

3 に答える 3

4

到着する各要求は、個別の HttpApplication オブジェクトにルーティングされます。HttpApplication オブジェクトは、最初から作成されるか、プールから割り当てられます。作成される HttpApplication オブジェクトの最大数は、使用可能なスレッドの最大数によって制限されます。ASP.NET 1.x では、デフォルトは 20 程度だったと思います。ASP.NET 2.0 では、この制限は動的に管理されます。

アプリケーションが失敗し始める前に、ASP.NET スレッド プールを使い果たすのに十分な数の要求を作成する必要があります。

コードの記事のコメントが意味することは、彼のコードがサーバーのボトルネックになっているということではなく、異なるスレッド ID など、複数のリクエストを並べて状態を確認できるようにするためにコードを使用しているということです。

于 2008-11-21T06:26:53.300 に答える
3

へー。問題は Google Chrome でした。その中に2つのタブを開きましたが、それらが同じURLを指していると、リクエストが順番に送信され、次々と完了したようです!

アイデアをありがとう!

于 2008-11-21T06:14:58.940 に答える
2

スレッド ID を出力するようにサンプルを変更してみませんか? 複数のスレッドがリクエストを同時に処理しているかどうかがわかります。きっとそうです。

于 2008-11-21T05:51:21.327 に答える