Как потоки привязаны к запросам через http.sys, IIS и ASP.NET
-
27-10-2019 - |
Вопрос
Я сейчас много читаю о 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.
Открытые вопросы у меня все еще есть:
- Как, черт возьми, IIS меняет заголовок сервера, если он использует http.sys? (Смотрите этот вопрос)
ПРИМЕЧАНИЕ: я не уверен, соответствует ли/как «очередь запроса в режиме ядра» соответствует IO завершение порта, Я бы предположил, что у каждого запроса будет свой собственный, но я не знаю, поэтому я искренне надеюсь, что кто -то ответит на это более тщательно. Я просто наткнулся на этот вопрос И кажется, что http.sys на самом деле использует порты завершения ввода -вывода, что должно обеспечить почти все те же бенифы, которые были связаны с io (node.js, nginx, lighttpd, c10k и т. Д.).