.Net 4.0 Threadpool в Windows Azure - PullRequest
       2

.Net 4.0 Threadpool в Windows Azure

1 голос
/ 04 апреля 2011

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

Первая мысль: ThreadPool прост в использовании, и вы можете установить MaxThreads. Но, насколько мне известно, каждый метод Begin * (например, BeginInvoke) использует пул потоков, поэтому мы не можем контролировать количество потоков, выделенных для наших команд.

Сегодня коллега обнаружил этот TaskScheduler на MSDN, выглядит лучше, чем ThreadPool, но я понятия не имею, работает ли он правильно.

Есть ли другие альтернативы ThreadPool? Опыт работы с ThreadPool и Windows Azure?

Ответы [ 2 ]

3 голосов
/ 04 апреля 2011

Вы используете Fx 4, это означает, что вы можете использовать TPL и PLINQ.Оба работают поверх (улучшенного) ThreadPool.

Таким образом, вы можете начать с простого запуска его на TPL, например, с Parallel.ForEach().Базовый ThreadPool уже пытается сбалансировать рабочую нагрузку с количеством потоков.Для (множества) довольно коротких задач это обычно работает хорошо.

Следующим шагом является добавление .WithDegreeOfParallelism(numCoresTouse) в TPL или PLINQ.

Запись / использование пользовательского (TPL) планировщика кажется здесь излишним.

3 голосов
/ 04 апреля 2011

Вы можете использовать System.Threading.Parallel - он имеет параметры, которые позволяют вам контролировать степень многопоточности.

var threadOptions = new ParallelOptions { MaxDegreeOfParallelism = 5 };    
Parallel.For(0, 1000, threadOptions, i=>    
{    
    // do stuff...
});

До сих пор я использовал это в WorkerRoles без каких-либо проблем. В веб-ролях это может быть проблемой, поскольку IIS также использует тот же ThreadPool для обработки веб-запросов.

Стоит прочитать о - http://msdn.microsoft.com/en-us/library/dd460693.aspx - и в скором времени в C # 5 появится новая платформа Async (в настоящее время в CTP)

...