суббота, 31 октября 2009 г.

Параллельный LINQ

Многоядерные и многопроцессорные системы уже ни для кого не являются новостью, так как прогресс никогда не стоит на месте. В данном посте я хочу немного рассказать про набор расширений Parallel FX, а конкретно про PLINQ - механизм выполнения LINQ запросов на многоядерных системах. Отличия  с точки зрения синтаксиса в LINQ и PLINQ минимальны, все что требуется от программиста - это обвернуть источник данных в IParallelEnumerable<T> с помощью расширения System.Linq.ParallelEnumerable.AsParallel. К примеру возьмем запрос:

var T = Dat.Where(x => x.Value == 5).Select(x => x);

для его распараллеливания следует внести следующие изменения:

 var T = Dat.AsParallel().Where(x => x.Value == 5).Select(x => x);

Или же:

var T = from A in Dat.AsParallel() where A.Value == 5 select A;

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

Ссылки:
http://en.wikipedia.org/wiki/Parallel_Extensions
http://msdn.microsoft.com/ru-ru/magazine/cc163329.aspx

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

Отправить комментарий