Томский политехнический университет
Опубликован: 23.01.2013 | Доступ: свободный | Студентов: 1158 / 192 | Длительность: 12:09:00
Лекция 2:

Параллельное программирование в .NET Framework 4.0

Аннотация: В рамках данной лекции будут рассмотрены следующие вопросы: введение в параллельное программирование .NET Framework 4; библиотека PFX; компоненты библиотеки PFX; библиотека параллелизма задач и данных (TPL)

Введение в параллельное программирование .NET Framework 4

В прошлом распараллеливание алгоритмов требовало управления потоками и взаимоблокировками на низком уровне. Visual Studio 2010 и .NET Framework 4 улучшают поддержку параллельного программирования, путем предоставления новой среды выполнения, новых типов библиотек класса (TPL) и новых средств диагностики (Concurrency Visualizer). Эти возможности упрощают параллельную разработку, что позволяет разработчикам писать эффективный, детализированный и масштабируемый параллельный код с помощью естественных выразительных средств без необходимости непосредственной работы с потоками или пулом потоков. На Рис. 2.1 представлен общий обзор архитектуры параллельного программирования в .NET Framework 4.

 Архитектура параллельного программирования в .NET Framework 4

увеличить изображение
Рис. 2.1. Архитектура параллельного программирования в .NET Framework 4

Библиотеки PFX

Библиотека PFX (Parallel Extensions to the .NET Framework) была разработана фирмой Microsoft, данная библиотека позволяет распараллеливать задачи, в которых могут использоваться специальные координирующие структуры данных, таким образом, упрощая написание параллельных программ, и обеспечивая увеличение производительности при увеличении числа ядер или числа процессоров. Существует две стратегии разделения работы между потоками:

  • Параллелизм данных (data parallelism). Параллелизм данных используется, если необходимо над большим объемом данных выполнить некий набор задач, поэтому этот подход называется параллелизмом данных, поскольку мы разбиваем данные между потоками.
  • Параллелизм задач (task parallelism). В противоположность параллелизму данных, используется параллелизме задач с распараллеливанием задачи, и в таком случае каждый поток выполняет разную задачу.

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

Компоненты библиотеки PFX

Библиотека PFX включает в себя два уровня функциональности (Рис. 2.2):

  • Верхний уровень состоит из двух API структурного параллелизма данных: PLINQ и класса Parallel.
  • Нижний уровень содержит классы для параллелизма задач (библиотека TPL) и дополнительный набор конструкций, упрощающих решение задач параллельного программирования.
 Компоненты  библиотеки PFX

Рис. 2.2. Компоненты библиотеки PFX

Библиотека PLINQ автоматизирует все этапы распараллеливания вычислений, включая разделение работы на задачи, выполнение этих задач различными потоками и объединение результатов в одну выходную последовательность. Использование этой библиотеки называется декларативным, поскольку просто нужно объявить то, что нужно выполнить параллельно, и не нужно заботиться о деталях реализации. При использовании императивного подхода нужно явно прописывать код по разделению задачи и объединению результатов.

Параллельные коллекции (concurrent collections) и спин-примитивы (spinning primitives) помогают в решении низкоуровневых задач параллельного программирования, что очень важно, поскольку PFX проектировалась для работы не только на современном оборудовании, но и с будущими поколениями процессоров со значительно большим количеством ядер. Параллельные коллекции оптимизированы специально для высококонкурентного доступа и сосредоточены на минимизации или устранении блокировок. PLINQ и класс Parallel в частности, основываются на параллельных коллекциях и спин-примитивах для эффективной реализации своей работы.

Примечание. Подробное описание потоков и пулов CLR приведено в "Создание первого приложения"

Библиотека параллелизма задач (TPL)

Одним из самых главных среди нововведений, внедренных в среду .NET Framework 4.0, является библиотека распараллеливания задач (TPL). Эта библиотека усовершенствует многопоточное программирование двумя основными способами:

  • Во-первых, упрощает создание и применение многих потоков.
  • Во-вторых, позволяет автоматически использовать несколько процессоров.

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

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

Библиотека TPL определена в пространстве имен System.Threading.Tasks (Рис. 2.3). Но для работы с ней обычно требуется также включать в программу класс System.Threading, поскольку он поддерживает синхронизацию и другие средства многопоточной обработки, в том числе и те, что входят в класс Interlocked.

 Пространство имен System.Threading.Tasks

увеличить изображение
Рис. 2.3. Пространство имен System.Threading.Tasks

Библиотека TPL позволяет автоматически распределять нагрузку приложений между доступными процессорами в динамическом режиме, используя пул потоков CLR. Библиотека TPL занимается распределением работы, планированием потоков, управлением состоянием и прочими низкоуровневыми деталями. В результате появляется возможность максимизировать производительность приложений .NET. не имея дела со сложностями прямой работы с потоками.

Владимир Каширин
Владимир Каширин

Вопрос по Курсу: "Параллельное программирование с использованием MS VisualStudia 2010".

При компиляции Самостоятельного задания (одновременная отрисовка прямоугольников, эллипсов и выдача в текст-бокс случайного числа) среда предупреждает: suspend - устаревшая команда; примените monitor, mutex и т.п.

Создаётся впечатление, что Задание создано в более поздней среде, чем VS 2010.