Что такое PLINQ? - PullRequest
       27

Что такое PLINQ?

38 голосов
/ 02 ноября 2009

PLINQ был добавлен в .NET 4.0 Framework как расширение для LINQ.

  • Что это?
  • Какие проблемы это решает?
  • Когда это уместно, а когда нет?

Ответы [ 5 ]

35 голосов
/ 02 ноября 2009

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

В MSDN Magazine есть хорошая статья об этом .

Для ознакомления с текущими подробностями и планами, я рекомендую прочитать статьи по Параллельное программирование с .NET Team Blog . Это команда, реализующая параллельные расширения, включая PLINQ.

15 голосов
/ 28 ноября 2009

PLINQ - это LINQ, выполняемый параллельно, то есть использующий столько вычислительной мощности, сколько у вас есть на вашем текущем компьютере.

Если у вас есть компьютер с 2 ядрами, например, двухъядерный процессор, операторы Language Integrated Query будут выполнять работу параллельно, используя оба ядра.

Используя «только» LINQ, вы не получите столько производительности, потому что стандартные операторы Language Integrated Query не будут распараллеливать ваш код. Это означает, что ваш код будет работать последовательно, без использования всех доступных ядер процессора.

Существует множество операторов запросов PLINQ, способных выполнять ваш код с использованием хорошо известных параллельных шаблонов.

Взгляните на мой пост в блоге, в котором я показываю скорость, которую вы получаете при выполнении простого запроса LINQ в параллельном режиме с использованием метода расширения AsParallel:

Parallel LINQ (PLINQ) с Visual Studio 2010/2012 - тестирование производительности

Если вы хотите углубиться, используя PLINQ, я советую вам прочитать:

Шаблоны для параллельного программирования: понимание и применение параллельных шаблонов в .NET Framework 4

10 голосов
/ 02 ноября 2009

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

3 голосов
/ 02 ноября 2009

Это позволяет вам добавить .AsParallel к вашему LINQ, чтобы попытаться выполнить запрос, используя как можно больше процессоров. Аккуратно, но вам все же нужно немного узнать о том, является ли ваш алгоритм «параллелизуемым» - это не волшебство.

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

1 голос
/ 02 ноября 2009

Из параллельных расширений Википедии :

Parallel LINQ (PLINQ) - это механизм параллельного выполнения запросов для LINQ, распараллеливающий выполнение запросов к объектам (LINQ to Objects) и данным XML (LINQ to XML). PLINQ предназначен для демонстрации параллелизма данных с помощью запросов. Любые вычисления для объектов, которые были реализованы как запросы, могут быть распараллелены PLINQ. Однако объекты должны реализовывать интерфейс IParallelEnumerable, который определяется самим PLINQ. Внутренне он использует TPL для исполнения.

...