Что такое PLINQ?

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

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

5 ответов


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

есть хорошая статья об этом журнал MSDN.

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


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

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

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

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

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

параллельный LINQ (PLINQ) с Visual Studio 2010/2012 - Perf тестирование

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

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


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


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

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


из Википедии Параллельные Расширения:

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