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

StackOverflow https://stackoverflow.com/questions/4839657

Вопрос

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

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

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

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

Это было полезно?

Решение

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

«Каждая очередь запросов соответствует одному пулу приложений. Пул приложений соответствует одной очереди запроса в HTTP.SYS и одному или нескольким рабочим процессам».

Итак, в соответствии с этим, в каждой очереди запроса может быть более одного "Рабочий процесс. »(Google Cache) Подробнее о рабочих процессах

От моего понимания:

  • IIS Opens создает очередь запроса (см. Http.sys API ниже)
  • «Веб -сайт», настроенный в IIS, соответствует одному рабочему процессу
  • Веб -сайт/работник акции Пул ниток.
  • Поток вручает запрос из очереди запроса.

Вот много отличной информации о Архитектура IIS7

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

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


ПРИМЕЧАНИЕ: я не уверен, соответствует ли/как «очередь запроса в режиме ядра» соответствует IO завершение порта, Я бы предположил, что у каждого запроса будет свой собственный, но я не знаю, поэтому я искренне надеюсь, что кто -то ответит на это более тщательно. Я просто наткнулся на этот вопрос И кажется, что http.sys на самом деле использует порты завершения ввода -вывода, что должно обеспечить почти все те же бенифы, которые были связаны с io (node.js, nginx, lighttpd, c10k и т. Д.).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top