Разделение нагрузки на несколько потоков

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

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

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

Спасибо за ваши ответы!


person David Božjak    schedule 16.01.2009    source источник


Ответы (4)


Вам следует взглянуть на Parallel FX (PFX), вы можете найти блог здесь и ссылку для скачивания здесь (спасибо, Марк).

К сожалению, я не знаю, будет ли это выпущено для .NET 2.0/3.5, поскольку в настоящее время оно запланировано для .NET 4.0.

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

Существует также библиотека под названием Power Threading, созданная Джеффри Рихтером из Wintellect, в котором есть несколько неплохих классов.

person Lasse V. Karlsen    schedule 16.01.2009

Лассе и Марк уже говорили о параллельных расширениях. У меня есть пара статей в блоге (с кодом) об использовании и тестировании:

Это может быть полезно, чтобы показать различные способы разделения работы.

person Jon Skeet    schedule 16.01.2009

Для этого предназначены «Параллельные расширения», в частности класс Parallel (который позволяет очень легко разделить работу между потоками). Агрегирование результатов сложнее; некоторый быстрый поиск показывает некоторые неоднозначные результаты - но я не знаю, что будет в финальном релизе (т.е. может быть проще).

CTP доступен здесь или дождитесь .NET 4.0.

person Marc Gravell    schedule 16.01.2009

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

Для получения дополнительной информации перейдите к моему вопросу о Белая книга автора Я когда-то видел на эту тему. Когда я недавно хотел показать эту статью коллеге, я (то есть: Google) больше не смог ее найти, отсюда и вопрос.

person peSHIr    schedule 16.01.2009