2012-05-08 3 views
0

Я прочитал, что .NET C# встроен в сборку задач и данных. Если я запускаю цикл for/foreach в своей программе на компьютере с 4 ядрами (4 окна Windows Task Manager), будет цикл быть равномерно распределены в 4 ядра? Если нет, почему цикл for/foreach не работает в четырех ядрах, параллельных по умолчанию?Параллелизм в C#

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

+0

Не знаю достаточно о C#, чтобы отправить ответ, но вы должны смотреть на Parallel.ForEach (http://msdn.microsoft.com/en-us/library /system.threading.tasks.parallel.foreach.aspx) – xbonez

ответ

-1

он не работает на 4 ядрах, потому что он не эффективен и не нужен каждый раз.

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

для этой темы я рекомендую читать http://www.amazon.com/Multi-Core-Programming-Increasing-Performance-Multi-threading/dp/0976483246/ref=sr_1_fkmr0_2?ie=UTF8&qid=1336440123&sr=8-2-fkmr0

+0

Нет, он не работает на четырех ядрах, потому что он не был закодирован именно так! – jason

4

Если я запустил цикл for/foreach в своей программе на компьютере с 4 ядрами (4 окна диспетчера задач Windows), будет ли цикл равномерно распределен в 4 ядра?

Вы хотите сказать, будет ли задача автоматически распараллеливаться по ядрам? Нет. Для этого вам нужно использовать Task Parallel Library, например Parallel.ForEach.

Вообще говоря, параллелизм лучше обычного программирования?

Это зависит.

Получает ли преимущества перевыполнения недостатков?

Это зависит.

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

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

+0

Или ... файл I/O !! – IAbstract

+0

Данные извлекаются из SQL Server и MongoDB, поэтому параллелизм не будет таким эффективным? Как бы вы оптимизировали этот сценарий, когда данные извлекаются из базы данных? Я делаю кеширование как можно больше. – iefpw

+0

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

0

Существует реализация специально для параллельной обработки (как состояния @xbonez).

.Net 4.0 имеет отличную параллельную библиотеку (MSDN: TPL).

Смежные вопросы