Запрос в реализации параллельной библиотеки задач - PullRequest
2 голосов
/ 08 марта 2011

HI ALL,

Мой запрос касается реализаций TaskParallel Library.

У меня есть список со мной.Мне нужно выполнять все задачи параллельно, и в любой момент времени количество выполняемых задач должно быть 3. т. Е. Если у меня 9 задач, первые 3 задачи должны быть начаты изначально, и если любая из них завершена,следующий должен быть запущен, и в любой момент времени должно выполняться не более 3 задач.

Каков наилучший способ реализовать это?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 12 марта 2011

Если вы используете Parallel :: ForEach , вы можете использовать перегрузку, которая принимает ParallelOptions, для которого вы установите MaxDegreeOfParallelism = 3. Если вы используете PLINQ, вы можете использовать WithDegreeOfParallelism(3).

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

0 голосов
/ 12 марта 2011

Вы уже изучили System.Threading? Есть класс Parallel, который выглядит как то, что вы ищете.

0 голосов
/ 12 марта 2011

Вы можете реализовать планировщик, который ограничивает степень параллелизма.

http://msdn.microsoft.com/en-us/library/ee789351.aspx

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

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

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

...