Как получить многопоточный тест? - PullRequest
0 голосов
/ 28 июля 2011

Я только начал изучать программирование на C #.В эти дни я изучаю тест производительности для указанного расчета в .NET 4.0.Система считывает и копирует несколько данных и вычисляется моей собственной функцией.

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

Я запутался в том, как создавать потоки.Конечно, я могу сделать их как List и работать по очереди, например:

Function la = new Function();
List<Thread> threadSet = new List<Thread>();
for (int i = 0; i < 300; i++)
  threadSet.Add(new Thread(new ThreadStart(la.doWork)));
for (int i = 0; i < 300; i++)
  threadSet[i].Start();

Или есть какой-нибудь лучший способ?Я видел проблему с пулом потоков, но я не знаю, чем она отличается.

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

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

Спасибо.Пожалуйста, научи меня!

Ответы [ 2 ]

0 голосов
/ 17 августа 2011

с .Net 4.0 самый простой способ сделать то же самое будет:

Parallel.For(0,300, _ => la.doWork() );
// or with plinq
Enumerable.Range(1,300).AsParallel().ForAll(_ => la.doWork() );

Преимущество этого решения в том, что вам не придется заниматься созданием потоков и управлением ими, а также загромождать свой код им. Я должен отметить, что это не обязательно создаст поток для каждого рабочего элемента.

Теперь этот код является оптимальным, только если la.dowork () является задачей только для ЦП. Если он включает какой-либо ввод-вывод (чтение из файла или сети), он может быть очень неэффективным, потому что большую часть времени потраченный потоком будет потрачен впустую на ожидание данных.

Не могли бы вы немного подробнее рассказать о том, что вы делаете (где вы читаете данные и что вы делаете с ними)?

0 голосов
/ 28 июля 2011

Наличие большого количества потоков не всегда увеличивает производительность.Это зависит от вашей задачи (связана ли она с вводом / выводом или с процессором) и сколько у вас задач.

В .Net 4.0 у вас есть библиотека PLinq.Он будет пытаться оптимально работать для вашего оборудования, поэтому он сам выберет, сколько паррализма необходимо иметь для вашей среды. Читайте эту статью.http://msdn.microsoft.com/en-us/magazine/cc163329.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...