Подтвердить что ты не робот

Как потоки привязаны к запросам через Http.sys, IIS и ASP.NET

В настоящее время я много читаю о node.js. Частое сравнение между серверами осуществляется с использованием традиционного потока на модель запроса (Apache) и серверов, которые используют цикл событий (Nginx, node, Tornado).

Я хотел бы подробно рассказать о том, как обрабатывается запрос в ASP.NET - с той точки, в которой он получен в http.sys, вплоть до его обработки в ASP.NET. Я обнаружил, что документация MSDN на http.sys и IIS немного отсутствует, но, возможно, сегодня мой google-fu слаб. Пока что лучший ресурс, который я нашел, - это сообщение на Блог Томаса Марквардта.

Может ли кто-нибудь пролить свет на эту тему или указать мне на другие ресурсы?

(Для целей этого вопроса меня интересует только IIS7 с типичным интегрированным конвейером)

4b9b3361

Ответ 1

Из моих исследований до сих пор, мое понимание того, что когда запрос приходит в него, попадает в очередь запросов в режиме ядра. Согласно this, это позволяет избежать многих проблем с переключением контекста, когда есть огромное количество запросов (или процессов или потоков...) предоставляя аналогичные преимущества для случая ввода-вывода. Цитата из статьи:

"Каждая очередь запросов соответствует одной пул приложений. Пул приложений соответствует одной очереди запросов внутри HTTP.sys и одного или нескольких рабочих процессы".

Таким образом, в соответствии с этим каждая очередь запросов может иметь более одного Worker Process. "(Кэш Google) Дополнительные сведения о рабочих процессах

Из моего понимания:

  • IIS Открывает создает очередь запросов (см. http.sys api ниже)
  • "Веб-сайт", настроенный в IIS, соответствует одному рабочему процессу
  • Веб-сайт/рабочий процесс share пул потоков.
  • Поток передаёт запрос из очереди запросов.

Здесь представлена ​​большая информация о архитектура IIS7

Вот еще информация о http.sys.

Открытые вопросы, которые у меня есть:

  • Как изменится IIS заголовок сервера, если он использует HTTP.SYS? (См. этот вопрос)

Примечание. Я не уверен, что если "очередь запросов в режиме ядра" соответствует порт завершения ввода-вывода, я бы предположил что каждый запрос будет иметь свои собственные, но я не знаю, поэтому я действительно надеюсь, что кто-то ответит на это более тщательно. Я просто наткнулся на этот вопрос, и похоже, что http.sys фактически использует порты ввода-вывода IO, которые должны обеспечивать почти все те же преимущества, что и IO (node.js, nginx, lighttpd, C10K и т.д.).