Как назначаются потоки IIS7? - PullRequest
9 голосов
/ 06 февраля 2011

Я добавил log4net в свое приложение и теперь могу видеть идентификаторы потоков пользовательских действий при их перемещении по моему веб-сайту. Существует ли какой-либо конкретный алгоритм для того, как назначение потоков происходит с IIS7, или это просто случайное назначение номеров (я подозреваю, что это не совсем случайное назначение, потому что мой сайт с низким трафиком показывает потоки в основном в диапазоне 10-30)? Есть ли максимальное количество доступных потоков? И я замечаю, что мой планировщик появляется со странным идентификатором потоков - есть ли причина для этого? Планировщик - Quartz.net, а идентификатор отображается как «Scheduler_Worker-10», а не просто число.

Ответы [ 2 ]

8 голосов
/ 06 февраля 2011

Это объясняет все, что вам нужно знать.

Выдержка:

Когда ASP.NET размещается на IIS 7.0 в интегрированном режиме, использованиепотоков немного отличается.Во-первых, очередей на уровне приложений больше нет.Их выступление всегда было очень плохим, не было никакой надежды исправить это, и поэтому мы избавились от них.Но, пожалуй, самое большое отличие состоит в том, что в IIS 6.0 или режиме ISAPI ASP.NET ограничивает число потоков, одновременно выполняющих запросы, но в интегрированном режиме IIS 7.0 ASP.NET ограничивает количество одновременно выполняемых запросов.Разница имеет значение только тогда, когда запросы являются асинхронными (запрос имеет либо асинхронный обработчик, либо модуль в конвейере завершается асинхронно).Очевидно, что если запросы являются синхронными, то количество одновременно выполняющихся запросов равно количеству потоков, одновременно выполняющих запросы, но если запросы асинхронные, тогда эти два числа могут быть совершенно разными, поскольку у вас может быть гораздо больше запросов, чем потоков.

Таким образом, в основном, если запросы являются синхронными, одинаковое количество потоков на запрос.Смотрите здесь для различных параметров .

4 голосов
/ 06 февраля 2011

Я объяснил, что это запись в моем блоге Бизнес-уровни, определяющие производительность ASP.NET

Название не совпадает с вашим вопросом, но я объясняю способ IISобрабатывает запросы, и я полагаю, что у вас будет ваш ответ.

Цитата из статьи

Когда IIS отправляет запрос на ваше приложение, он передает его рабочему процессу.Рабочий процесс, в свою очередь, создает и экземпляр вашего класса Global (который имеет тип HttpApplication).С этого момента происходит типичный поток приложения ASP.NET (конвейер ASP.NET).Однако, что вам нужно знать и понимать, это то, что рабочий процесс (на самом деле он воспринимается как IIS) поддерживает работу экземпляра вашего HttpApplication (экземпляра вашего класса Global) для отправки других запросов.Фактически, он по умолчанию будет создавать и кэшировать до 10 экземпляров вашего класса Global, если требуется (отложенная реализация), в зависимости от загрузки, количества запросов, которые ваш сайт получает от других факторов.На рисунке 1 выше экземпляры вашего приложения ASP.NET показаны в виде красных прямоугольников.Там может быть до 10 из них кэшируются рабочим процессом.Это действительно потоки, которые рабочий процесс создал и кэшировал, и у каждого потока есть свой экземпляр вашего класса Global.Обратите внимание, что каждый из этих потоков находится в одном домене приложения.Поэтому любые статические классы, которые вы можете иметь в своем приложении, являются общими для каждого из этих потоков или экземпляров приложения.

Я предлагаю вам прочитать эту статью, и я буду рад ответить на любые ваши вопросы.Пожалуйста, обратите внимание, что я намеренно сохранил эту статью простой, потому что я не говорю о том, что происходит в ядре, и не буду вдаваться в подробности различных участвующих компонентов.Упрощение помогает людям понять концепции намного лучше (я чувствую).

Я отвечу на некоторые другие ваши вопросы здесь:

  1. Есть ли какой-то конкретный алгоритм для того, как нитиназначение происходит с IIS7?

Нет, для всех намерений и целей это случайно.Это объясняется в статье, на которую я указал.Короткий ответ: если кешированный поток доступен, то его будут использовать IIs.Если нет, он создаст новый поток, создаст и экземпляр вашего HttpApplication (Global) и назначит ему весь контекст.Так что на сайте, который не занят, вы можете видеть, что те же потоки обрабатывают запросы.Но нет никаких гарантий.Если существует более одного свободного потока, IIS будет случайным образом выбирать поток для обслуживания этого запроса.Здесь следует отметить, что даже на не очень загруженном сайте, если ваши запросы занимают много времени, IIS будет вынужден создавать новые потоки для обслуживания других входящих запросов.

  1. Любое максимальное числодоступных потоков?

Да (как объяснено в этой статье) обычно 10 потоков на рабочий процесс.Это можно изменить, но я работал на нескольких чрезвычайно загруженных сайтах, и мне никогда не приходилось.Главное, чтобы ваши приложения реагировали как можно быстрее.Имейте в виду, что приложению может быть назначено несколько рабочих процессов (настроенных в пуле приложений), поэтому на загруженных сайтах вам действительно нужно несколько рабочих процессов для вашего приложения, однако это означает, что у вас есть необходимое оборудование (ядра ЦП и память).

  1. Планировщик - Quartz.net, а идентификатор отображается как «Scheduler_Worker-10», а не просто число

. У потоков могут быть имена вместо идентификаторов.Если потоку было присвоено имя, вы увидите это вместо идентификатора.Конечно, для потоков, которые создает IIS, у вас нет такого контроля.Имейте в виду, я не использовал (и не знаю о Кварце), поэтому я не знаю об этом, но я думаю, что это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...