По моим исследованиям, насколько я понимаю, когда приходит запрос, он помещается в очередь запросов режима ядра.Согласно this , это позволяет избежать многих проблем с переключением контекста при большом количестве запросов (или процессов или потоков ...), обеспечивая аналогичные преимущества для вечернего ввода-вывода.Цитируется из статьи:
"Каждая очередь запросов соответствует одному пулу приложений. Пул приложений соответствует одной очереди запросов в HTTP.sys и одному или нескольким рабочим процессам."
Таким образом, в соответствии с этим каждая очередь запросов может иметь более одного « рабочего процесса ».(Кеш Google) Подробнее о рабочих процессах
Насколько я понимаю:
- IIS Opens создает очередь запросов (см. API http.sys ниже)
- «Веб-сайт», настроенный в IIS, соответствует одному рабочему процессу
- Веб-сайт / рабочий процесс разделяет пул потоков.
- Передается потокзапрос из очереди запросов.
Вот много полезной информации об архитектуре IIS7
Вот еще немного информации о http.sys.
Открытые вопросы, которые у меня все еще есть:
- Как, черт возьми, IIS меняет заголовок сервера, если он использует HTTP.SYS?( См. Этот вопрос )
Примечание. Я не уверен, соответствует ли / как "очередь запросов режима ядра" порту завершения ввода-вывода , я бы предположил, что у каждого запроса будет свой, но я не знаю, поэтому я искренне надеюсь, что кто-то ответит на этот вопрос более тщательно.Я только что наткнулся на этот вопрос , и кажется, что http.sys фактически использует порты завершения ввода-вывода, которые должны обеспечивать почти все те же преимущества, что и вечерний ввод-вывод (node.js, nginx, lighttpd, C10K,и т.д ...) есть.