我想知道 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 应用程序根目录,它们会同时启动和停止。然而,他们似乎没有。第二个标签开始时间与第一个结束时间相同。然后,我通过在 httpmodule 或 default.aspx page_load 中使用相同的代码进行测试,并得到了相同的结果。
这里发生了什么?为什么不并行处理请求?
编辑:我主要将我的理解放在两篇文章中:
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