Мне интересно, как на самом деле работает параллелизм в веб-приложении. Я прочитал несколько статей и, насколько я понимаю, несколько экземпляров HttpApplication будут работать одновременно. Теперь я создал простое веб-приложение для тестирования параллелизма и поместил в 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();
}
Я ожидал, что если я перейду к корню веб-приложения на нескольких вкладках браузера почти одновременно, они будут запускаться и останавливаться одновременно. Однако похоже, что это не так. Время начала второй вкладки такое же, как время окончания первой вкладки. Затем я протестировал этот же код в 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