Как правильно использовать пул потоков ASP.NET? - PullRequest
1 голос
/ 25 августа 2010

Мой сценарий такой: у меня есть файл, который медленно заполняется в течение часа или двух (mp3, видео и т. Д.). Поскольку этот файл заполнен, многие пользователи подключаются к серверу для получения новых данных по мере их добавления на сервер.

В данный момент каждый посетитель подключается к серверу, и IHttpAsyncHandler выделяет поток из пула потоков для обработки запроса. Однако, используя настройки пула потоков по умолчанию, это означает, что только 20 посетителей могут одновременно подключаться к серверу (одному процессору).

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

Большое спасибо, Ади

Ответы [ 2 ]

1 голос
/ 25 августа 2010

Я бы просто использовал для этой цели обычные Thread с. .NET ThreadPool на самом деле не предназначен для поддержки освобождения и повторной активации (длительных) потоков в зависимости от их внутреннего состояния ... по крайней мере, вам нужно было бы заняться творческим программированием, чтобы достичь желаемого поведение, если вы придерживаетесь ThreadPool (то есть разбиваете логику на небольшие асинхронные задачи, которые выполняются ThradPool).

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

0 голосов
/ 25 августа 2010

F # имеет функцию Асинхронные рабочие процессы , которая идеально подходит для такого рода вещей.Когда ваш код ожидает внешнего источника данных, поток возвращается в пул потоков для других целей.Когда поступают новые данные, рабочий процесс извлекает поток из пула и использует его для возобновления кода, с которого вы остановились.Таким образом, вам никогда не придется связывать поток, который ничего не делает, кроме ожидания ввода-вывода.

Изучение нового языка может быть излишним только для этого одного использования, но F # возвышается над любым другим языком CLRкогда дело доходит до асинхронного ввода-вывода, и это действительно забавный язык, к тому же.

...