Как ASP.NET многопоточен?

Мне сказали, что ASP.NET многопоточно по умолчанию в IIS. Как достигается эта резьба?

Ферма серверов отправляет разные запросы на разные ядра?

Использует ли один запрос несколько ядер?

Что еще более важно, есть ли какие-либо преимущества для добавления streamов в код ASP.NET, если streamи выполняются выше в IIS?

IIS автоматически использует несколько ядер (хотя вы можете отключить его, если захотите).

Преимущество добавления streamов в код ASP.NET заключается в том, что вы можете контролировать внутреннюю работу собственного приложения и не вынуждать полагаться на IIS, чтобы принимать все решения для вас.

Мало того, что сервер использует разные запросы для разных streamов, но один запрос может изменять stream в течение жизненного цикла. Это называется гибкостью streamа . Я ищу хорошую статью, объясняющую это …

EDIT: никаких окончательных статей пока нет, но один пост в блоге, объясняющий некоторые трудности.

EDIT: Больше ссылок с комментариев:

  • Переключение streamов ASP.NET (запись в блоге)
  • Что такое «операция async IO» в .NET? (SO вопрос, звучит неактуально, но нет)
  • Трассировка ASP.NET и System.Diagnostics (вопрос SO)
  • Различия в streamах между IIS 6 и 7

ASP.net использует .Net threadpool (который настраивается). Каждый запрос принимается одним из streamов в threadpool, пока каждый stream уже не занят. Затем запрашивает очередь в стеке IIS, пока это не переполнится. Оттуда новые запросы встречаются с очень уродливым сообщением «Сервер недоступен».

Это обычная «многопоточная» история для веб-сайта ASP.net.

Существует множество способов обеспечения масштабируемости. Наиболее очевидным является тестирование производительности и устранение узких мест из вашего кода.

ASP.net действительно может использовать преимущества нескольких ядер, используя streamи ввода-вывода для любого запроса ввода-вывода. Это делает для уродливого кода, но быстро никогда не было красивым.

Вот окончательная публикация MSDN MAG о том, как это сделать.

ОБНОВИТЬ

Ну, я, вероятно, попытаюсь ответить на ваш полный вопрос:

«Что еще более важно, есть ли преимущество добавления streamов в код ASP.Net, если streamи выполняются выше в IIS?»

Короткий ответ: это зависит! Если вы ожидаете длительного процесса, вам лучше посоветовать реализовать более приятный опыт для запрашивающего клиента (т. Е. Внеполосные звонки AJAX)

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

Если ваш сайт получает много трафика, вам действительно нужно рассмотреть возможность внедрения асинхронных шаблонов, чтобы лучше использовать ваш процессор

Отдельный stream обычно генерируется для каждого нового запроса, тогда операционная система выполняет планирование процессора. Если вам не нужно обрабатывать только несколько запросов одновременно, вам не нужна дополнительная streamовая передача.

Interesting Posts
Давайте будем гением компьютера.