Как многопоточный ASP.NET? - PullRequest
24 голосов
/ 18 марта 2009

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

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

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

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

Ответы [ 4 ]

24 голосов
/ 18 марта 2009

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

РЕДАКТИРОВАТЬ: Еще нет окончательных статей, но один пост в блоге , объясняющий некоторые трудности.

РЕДАКТИРОВАТЬ: Больше ссылок из комментариев:

9 голосов
/ 18 марта 2009

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

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

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

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

Вот окончательный MSDN MAG пост о том, как это сделать

UPDATE

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

"Более важно, есть ли Преимущество добавления потоков в ASP.Net код, если поток выполняется выше в IIS? "

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

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

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

5 голосов
/ 18 марта 2009

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

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

3 голосов
/ 18 марта 2009

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

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