2008-11-21 2 views
2

Мне интересно, как работает параллелизм в веб-приложении. Я прочитал несколько статей, и, насколько мне известно, несколько экземпляров HttpApplication будут работать одновременно. Теперь, я создал простой веб-приложение, чтобы проверить параллельность и поставить следующее global.asax:IIS, конвейер Asp.NET и параллелизм

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 и получил тот же результат.

Что здесь происходит? Почему параллельные запросы не выполняются?

Edit: Я положил мое понимание в основном на две статьи: «Если несколько запросов, направленных на то же самое приложение приходят одновременно, будет использоваться несколько объектов HttpApplication»

http://msdn.microsoft.com/en-us/magazine/cc188942.aspx говорит

и http://www.code-magazine.com/article.aspx?quickid=0511061&page=5 имеет пример для страницы aspx, в основном, что я тестировал, с комментарием «Имитировать медленный запрос, чтобы мы могли видеть несколько запросов рядом». рядом с Thread.Sleep call

Возможно, что я совершенно не понимаю что-то ... но что?

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

ответ

3

Каждый запрос, который поступает, направляется в отдельный объект HttpApplication. Объект HttpApplication создается либо с нуля, либо выделяется из пула. Максимальное количество созданных объектов HttpApplication ограничено максимальным количеством доступных потоков. В ASP.NET 1.x я думаю, что по умолчанию было 20 или около того. В ASP.NET 2.0 этот лимит управляется динамически.

Вам нужно будет создать достаточное количество запросов для исчерпания пула потоков ASP.NET, прежде чем вы начнете дрожать.

Что означает комментарий в статье Кодекса, заключается не в том, что его код является узким местом для сервера, он использует его как способ видеть несколько запросов несколько раз рядом друг с другом, таких как разные идентификаторы потоков.

+0

Спасибо Кев, см. мой ответ тоже ... Я думал, что что-то странное происходит! – mmiika 2008-11-21 06:35:38

1

Почему вы не изменить образец для печати ИД нити? Это скажет вам, будут ли одновременно выполняться запросы нескольких потоков. Держу пари, что это так.

+0

Идентификатор темы меняется каждый раз, но затем каждый запрос начинается один за другим. – mmiika 2008-11-21 06:05:14

3

Хех. Проблема была в Google Chrome. Я открыл две вкладки, и кажется, когда они указывают на тот же URL-адрес, что запросы отправляются последовательно, один за другим завершается!

Спасибо за идеи, хотя!

+0

спасибо! была та же проблема ... :) – 2015-01-09 13:52:15

Смежные вопросы