Parallel.For в отличие от цикла for - PullRequest
       83

Parallel.For в отличие от цикла for

2 голосов
/ 16 сентября 2010

Я экспериментирую с параллельным программированием. У меня нормальный цикл:

for (int i = 0; i < 100000; i++)
{
    Console.WriteLine("Thread ID: {0} and i is " + i + " Time Elapsed: " + sw.Elapsed,
        Thread.CurrentThread.ManagedThreadId);
}

Это просто увеличивает число до 100000

Можно ли использовать этот цикл for и превратить его в цикл Parallel.For для подсчета чисел до 100000, но с использованием всех процессоров параллельно?

Кроме того, при использовании Parallel.For, какие параметры необходимы? Как бы вы использовали его в простейшем виде?

Ответы [ 3 ]

9 голосов
/ 16 сентября 2010

Если вы хотите использовать Parallel.For, вам нужна некоторая синхронизация, возможно, также используются блокировки.Если вы действительно хотите использовать Parallel.For, я бы посоветовал вам перейти по ссылке, она прекрасно объясняет Parallel.For ... http://msdn.microsoft.com/en-us/magazine/cc163340.aspx

Надеюсь, это поможет

1 голос
/ 16 сентября 2010

Вы можете превратить его в цикл Parallel.For для подсчета до 100000, но вы, вероятно, не будете удовлетворены результатами :) Распределение работы связано со значительными накладными расходами.В этом случае работа, которую вы выполняете, недостаточно интенсивна в вычислительном отношении, чтобы компенсировать издержки многопоточности.Вместо этого вы хотели бы использовать Parallel.For, когда тело цикла очень интенсивно в вычислительном отношении (и не зависит от других итераций!).

Однако вы все равно можете сделать это, если хотите.Синтаксис имеет вид:

Parallel.For(0, 100000, (i) => { Console.WriteLine("Thread..."); });

Также имейте в виду, что выходные данные будут не в том порядке, в котором вы ожидаете: :)

Удачи !!

1 голос
/ 16 сентября 2010

Я полагаю, это то, что вы ищете:

Parallel.For(0, 10000, i =>
{
   Console.WriteLine("Thread ID: {0} and i is " + i + " Time Elapsed: " + sw.Elapsed,
      Thread.CurrentThread.ManagedThreadId);
});
...