ASP.NET, IIS /CLR Thread & request в связи с синхронным асинхронным программированием v.s

Я просто пытаюсь прояснить некоторые понятия. Если кто-то хочет поделиться своим опытом в этом вопросе, он это очень ценит.

Следующее - мое понимание того, как IIS работает по отношению к нитям, пожалуйста, поправьте меня, если я ошибаюсь.

HTTP.sys

Как я понимаю, для IIS 6.0 (я пока оставлю IIS 7.0) веб-браузер делает запрос, получает его от драйвера ядра HTTP.sys, HTTP.sys передает его в потоковую пул IIS 6.0 (поток ввода/вывода?) и освобождает его сам.

Поток IIS 6.0 Thread/ThreadPool

Поток IIS 6.0 возвращает его в ASP.NET, который возвращает временный HSE_STATUS_PENDING в IIS 6.0, таким образом освобождая поток IIS 6.0 и затем перенаправляя его в поток CLR.

CLR Thread/ThreadPool

Когда ASP.NET берет свободный поток в нисходящем пуле CLR, он выполняет запрос. Если нет доступных CLR-потоков, он попадает в очередь прикладного уровня (которая имеет плохую производительность)

Поэтому, исходя из предыдущего понимания, мои вопросы следующие.

  1. В синхронном режиме это означает 1 запрос на 1 CLR-поток?

    *) Если да, то сколько ЗАКАЗЧИКов может быть обработано на 1 центральном процессоре? Или лучше спросить наоборот? Как могут быть разрешены CLR-потоки на 1 CPU? Скажем, 50 CLR-потоков разрешены, значит ли это, что в любой момент времени можно обслуживать только 50 запросов? Путаница.

  2. Если в конфигурации "processModle" я установил "requestQueLimit" на 5000, что это значит? Вы можете поставить в очередь 5000 запросов? Разве это не плохо? Почему вы когда-либо устанавливали его так высоко, так как очередь приложения имеет плохую производительность?

  3. Если вы программируете асинхронную страницу, то где именно она начинает получать преимущество в вышеописанном процессе?

  4. Я исследовал и обнаружил, что по умолчанию размер нитевого пула IIS 6.0 равен 256. Приходит 5000 одновременных запросов, обрабатываемых 256 потоками IIS 6.0, а затем каждый из 256 потоков передаёт его CLR-потокам, которые, как я полагаю, по умолчанию ещё меньше. Не асинхроно ли это само по себе? Немного запутано. Кроме того, где и когда узкое место начинает проявляться в синхронном режиме и в асинхронном? (Не уверен, что в этом есть какой-то смысл, я просто запутался).

  5. Что происходит, когда нитевой пул IIS (все 256 из них) занят?

  6. Что происходит, когда все нити CLR заняты? (Я предполагаю, что все запросы стоят в очереди на уровне приложения)

  7. Что происходит, когда очередь приложения превышает requestQueueLimit?

Большое спасибо за чтение, очень ценю вашу компетентность в этом вопросе.

9
задан Liming 9 September 2011 в 06:29
поделиться