Я объяснил, что это запись в моем блоге Бизнес-уровни, определяющие производительность ASP.NET
Название не совпадает с вашим вопросом, но я объясняю способ IISобрабатывает запросы, и я полагаю, что у вас будет ваш ответ.
Цитата из статьи
Когда IIS отправляет запрос на ваше приложение, он передает его рабочему процессу.Рабочий процесс, в свою очередь, создает и экземпляр вашего класса Global (который имеет тип HttpApplication).С этого момента происходит типичный поток приложения ASP.NET (конвейер ASP.NET).Однако, что вам нужно знать и понимать, это то, что рабочий процесс (на самом деле он воспринимается как IIS) поддерживает работу экземпляра вашего HttpApplication (экземпляра вашего класса Global) для отправки других запросов.Фактически, он по умолчанию будет создавать и кэшировать до 10 экземпляров вашего класса Global, если требуется (отложенная реализация), в зависимости от загрузки, количества запросов, которые ваш сайт получает от других факторов.На рисунке 1 выше экземпляры вашего приложения ASP.NET показаны в виде красных прямоугольников.Там может быть до 10 из них кэшируются рабочим процессом.Это действительно потоки, которые рабочий процесс создал и кэшировал, и у каждого потока есть свой экземпляр вашего класса Global.Обратите внимание, что каждый из этих потоков находится в одном домене приложения.Поэтому любые статические классы, которые вы можете иметь в своем приложении, являются общими для каждого из этих потоков или экземпляров приложения.
Я предлагаю вам прочитать эту статью, и я буду рад ответить на любые ваши вопросы.Пожалуйста, обратите внимание, что я намеренно сохранил эту статью простой, потому что я не говорю о том, что происходит в ядре, и не буду вдаваться в подробности различных участвующих компонентов.Упрощение помогает людям понять концепции намного лучше (я чувствую).
Я отвечу на некоторые другие ваши вопросы здесь:
- Есть ли какой-то конкретный алгоритм для того, как нитиназначение происходит с IIS7?
Нет, для всех намерений и целей это случайно.Это объясняется в статье, на которую я указал.Короткий ответ: если кешированный поток доступен, то его будут использовать IIs.Если нет, он создаст новый поток, создаст и экземпляр вашего HttpApplication (Global) и назначит ему весь контекст.Так что на сайте, который не занят, вы можете видеть, что те же потоки обрабатывают запросы.Но нет никаких гарантий.Если существует более одного свободного потока, IIS будет случайным образом выбирать поток для обслуживания этого запроса.Здесь следует отметить, что даже на не очень загруженном сайте, если ваши запросы занимают много времени, IIS будет вынужден создавать новые потоки для обслуживания других входящих запросов.
- Любое максимальное числодоступных потоков?
Да (как объяснено в этой статье) обычно 10 потоков на рабочий процесс.Это можно изменить, но я работал на нескольких чрезвычайно загруженных сайтах, и мне никогда не приходилось.Главное, чтобы ваши приложения реагировали как можно быстрее.Имейте в виду, что приложению может быть назначено несколько рабочих процессов (настроенных в пуле приложений), поэтому на загруженных сайтах вам действительно нужно несколько рабочих процессов для вашего приложения, однако это означает, что у вас есть необходимое оборудование (ядра ЦП и память).
- Планировщик - Quartz.net, а идентификатор отображается как «Scheduler_Worker-10», а не просто число
. У потоков могут быть имена вместо идентификаторов.Если потоку было присвоено имя, вы увидите это вместо идентификатора.Конечно, для потоков, которые создает IIS, у вас нет такого контроля.Имейте в виду, я не использовал (и не знаю о Кварце), поэтому я не знаю об этом, но я думаю, что это так.