Определение параллельных потоков.Каждый выполнялся в визуализаторе параллелизма

#visual-studio-2010 #concurrency #profiler

#visual-studio-2010 #параллелизм #профилировщик

Вопрос:

Я играю с визуализатором параллелизма в VS2010. Это отличная функция, но у меня возникают проблемы с определением потоков, где моя параллель.запускался ForEach. Я прилагаю скриншот здесь в надежде, что кто-нибудь еще сможет помочь. Кроме того, похоже ли, что мое приложение выполняется последовательно? Обратите внимание на выполнение в главном потоке и только в одном другом рабочем потоке.

Примечание: При выполнении этого запуска я установил параметры ParallelOptions.Максимальная степень параллелизма = Среда.ProcessorCount (= 2).

Любая помощь приветствуется!

введите описание изображения здесь

Ответ №1:

Похоже, что ваше приложение использует основной поток (оно может встроенно работать в главном потоке) и переключается между тремя рабочими потоками CLR в нижней части этого списка. Обычно разные части ForEach должны быть запланированы в разных потоках.

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

 System.Threading.Parallel...<PartitionerForEachWorker>...
  

в верхней части списка.

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

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

Дополнительную информацию об использовании профилировщика с параллельными приложениями можно найти здесь:

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

Комментарии:

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