Рабочие потоки ASP.NET тратят большую часть своего активного времени в заблокированном состоянии?

Я пытаюсь определить роль рабочих потоков ASP.NET. Моя установка IIS 7 по умолчанию разрешала до 25 рабочих потоков, тогда как в противном случае я бы установил ее равным 1.

Когда пользователь запрашивает страницу .aspx, я понимаю, что этот запрос будет загружать рабочий поток. Но загружает ли каждый из изображений на эту страницу захват рабочего потока? И как только изображение извлекается, является ли рабочий поток, который извлек его, также отвечает за передачу его пользователю (через блокирование-tcp-сокеты?)?

Ответ 1

Проследите, как веб-запрос на страницу ASPX выглядит для пользователя и его браузера.

Пользователь переводит свой браузер на страницу ASPX. На сервере IIS распознает это как запрос ASP.NET и направляет его обработчикам .NET для обработки, который включает в себя принятие рабочего потока, обработку страницы и доставку полученного HTML обратно в пользовательский браузер. Это не включает доставку фактических изображений, файлов JavaScript, файлов CSS и других внешних ресурсов - только полученный HTML из самой страницы возвращается к пользовательскому браузеру.

Когда пользовательский браузер отображает страницу, он будет делать дополнительные запросы для других ресурсов на странице - изображения, файлы JavaScript и т.д. Когда IIS получает запросы на эти файлы, он обрабатывает их как статический контент и поэтому обработчики ASP.NET(и их рабочие процессы) не участвуют в обработке или доставке содержимого.

Обратите внимание, что вы можете настроить IIS на использование обработчиков .NET для обработки этих типов запросов, но для статического контента IIS не будет делать это из коробки.

Ответ 2

Установщик IIS 7 включает в себя "Общие Http-функции- > Статическое содержимое" при установке. Этот модуль отвечает за обработку статического содержимого, и я не думаю, что он использует любые рабочие потоки.

Один рабочий поток кажется немного скудным, хотя и для тестового сервера. Если ваш код переходит в длинный процесс (скажем, длинный запрос), вы будете заблокированы от запуска других страниц, ожидающих одного рабочего процесса. Что побудило вас пожелать установить 1?

Ответ 3

Я не уверен, какую версию IIS вы говорите, поэтому вот что-то Я прочитал некоторое время назад на v5.1.

При использовании ASPCompat и состояния сеанса среда выполнения может сериализовать запросы на один и тот же сеанс на один поток.

В противном случае, по умолчанию, если вы сделаете 12 запросов к вашему приложению на спальную страницу, ASP.NET сделает каждый последующий запрос до тех пор, пока поток не будет освобожден предыдущим запросом. Вы можете контролировать это поведение с помощью параметров конфигурации и конфигурации (machine.config), где количество параллельных потоков - это разница между maxWorkerThreads и minFreeThreads. Пожалуйста, также дважды проверьте, что эти настройки arent установлены так, что ваше приложение может обрабатывать только один запрос ASP.NET одновременно.

Ответ 4

Да, если у вас есть блокировка вызовов в вашем коде приложения asp.net.

Нет, если вы отвечаете на запрос с данными, которые находятся в памяти.

Статические изображения не должны обслуживаться через Asp.Net, статический файловый сервер, такой как IIS или nginx, должен делать это намного быстрее.