Я просто пытаюсь прояснить некоторые понятия. Если кто-то хочет поделиться своим опытом в этом вопросе, он это очень ценит.
Следующее - мое понимание того, как IIS работает по отношению к нитям, пожалуйста, поправьте меня, если я ошибаюсь.
Как я понимаю, для IIS 6.0 (я пока оставлю IIS 7.0) веб-браузер делает запрос, получает его от драйвера ядра HTTP.sys, HTTP.sys передает его в потоковую пул IIS 6.0 (поток ввода/вывода?) и освобождает его сам.
Поток IIS 6.0 возвращает его в ASP.NET, который возвращает временный HSE_STATUS_PENDING в IIS 6.0, таким образом освобождая поток IIS 6.0 и затем перенаправляя его в поток CLR.
Когда ASP.NET берет свободный поток в нисходящем пуле CLR, он выполняет запрос. Если нет доступных CLR-потоков, он попадает в очередь прикладного уровня (которая имеет плохую производительность)
Поэтому, исходя из предыдущего понимания, мои вопросы следующие.
В синхронном режиме это означает 1 запрос на 1 CLR-поток?
*) Если да, то сколько ЗАКАЗЧИКов может быть обработано на 1 центральном процессоре? Или лучше спросить наоборот? Как могут быть разрешены CLR-потоки на 1 CPU? Скажем, 50 CLR-потоков разрешены, значит ли это, что в любой момент времени можно обслуживать только 50 запросов? Путаница.
Если в конфигурации "processModle" я установил "requestQueLimit" на 5000, что это значит? Вы можете поставить в очередь 5000 запросов? Разве это не плохо? Почему вы когда-либо устанавливали его так высоко, так как очередь приложения имеет плохую производительность?
Если вы программируете асинхронную страницу, то где именно она начинает получать преимущество в вышеописанном процессе?
Я исследовал и обнаружил, что по умолчанию размер нитевого пула IIS 6.0 равен 256. Приходит 5000 одновременных запросов, обрабатываемых 256 потоками IIS 6.0, а затем каждый из 256 потоков передаёт его CLR-потокам, которые, как я полагаю, по умолчанию ещё меньше. Не асинхроно ли это само по себе? Немного запутано. Кроме того, где и когда узкое место начинает проявляться в синхронном режиме и в асинхронном? (Не уверен, что в этом есть какой-то смысл, я просто запутался).
Что происходит, когда нитевой пул IIS (все 256 из них) занят?
Что происходит, когда все нити CLR заняты? (Я предполагаю, что все запросы стоят в очереди на уровне приложения)
Что происходит, когда очередь приложения превышает requestQueueLimit?
Большое спасибо за чтение, очень ценю вашу компетентность в этом вопросе.