ASP.NET: как обрабатываются параллельные запросы - PullRequest
8 голосов
/ 21 октября 2010

Давайте представим, что на сайте есть 2 страницы: быстрая и медленная.Запросы на замедление страницы выполняются в течение 1 минуты, запрос на быстрые 5 секунд.

Вся моя карьера разработчика Я думал, что если 1-й запустившийся запрос медленный: он сделает (синхронный) вызов БД ...Ждать ответа ... Если в течение этого времени будет выполнен запрос к быстрой странице, этот запрос будет обработан, пока система ожидает ответа от БД.

Но сегодня я нашел: http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx

Один экземпляр класса HttpApplication используется для обработки многих запросов за время его существования.Однако он может обрабатывать только один запрос за раз.Таким образом, переменные-члены могут использоваться для хранения данных по запросу.

Означает ли это, что мои первоначальные мысли ошибочны?

Не могли бы вы уточнить, что они значат?Я почти уверен, что все так, как я ожидаю ...

Ответы [ 3 ]

6 голосов
/ 26 января 2012

Запросы должны обрабатываться в последовательном порядке на стороне сервера, если оба запроса используют одно и то же состояние сеанса с доступом для чтения / записи из-за блокировки сеанса asp.net.

Вы можете найти больше информации здесь: http://msdn.microsoft.com/en-us/library/ie/ms178581.aspx

Параллельные запросы и состояние сеанса

Доступ к состоянию сеанса ASP.NET является исключительным для каждого сеанса, что означает, что если два разных пользователя делают параллельные запросы, доступ к каждому отдельному сеансу предоставляется одновременно. Однако, если два одновременных запроса сделаны для одного и того же сеанса (с использованием одного и того же значения SessionID), первый запрос получает эксклюзивный доступ к информации сеанса. Второй запрос выполняется только после того, как первый запрос завершен. (Второй сеанс также может получить доступ, если исключительная блокировка информации освобождается, поскольку первый запрос превышает время ожидания блокировки.) Если значение EnableSessionState в директиве @ Page установлено в ReadOnly, запрос только для чтения Информация о сеансе не приводит к исключительной блокировке данных сеанса. Однако запросы только для чтения для данных сеанса, возможно, все еще должны ждать блокировки, установленной запросом на чтение и запись, для очистки данных сеанса.

4 голосов
/ 21 октября 2010

ASP .NET будет размещать несколько доменов приложений для вашего веб-приложения в рамках одного рабочего процесса (w3wp.exe).Он может даже совместно использовать домены приложений для разных веб-приложений в рамках одного рабочего процесса (если они назначены одному и тому же пулу приложений).

Каждый создаваемый домен ASP.NET может содержать несколько экземпляров HttpApplication, которые обслуживают запросы и проходят черезжизненный цикл ASP .NET.Каждое HttpApplication может (как вы сказали) отвечать на один запрос за раз.

4 голосов
/ 21 октября 2010

Ваши первоначальные мысли верны, как и документация.Рабочий процесс IIS может порождать множество потоков, каждый из которых имеет собственный экземпляр класса HttpApplication.

...