День сто девятый. #ЗаметкиНаПолях
PLINQ
PLINQ или Параллельный LINQ – это движок параллельного выполнения выражений LINQ. Другими словами, обычное выражение LINQ может быть легко распараллелено в любое количество потоков. Это достигается через вызов метода AsParallel(), предшествующий выражению.
Рассмотрим следующий пример:
Параллелизуемые задания, использующие ресурсы ЦП, которые можно легко выразить через LINQ (другими словами, чистые функции без побочных эффектов) являются отличными кандидатами для PLINQ. Для работы с заданиями, которые имеют побочный эффект, рекомендуется рассмотреть возможность использования библиотеки параллельных задач.
Источник: https://docs.microsoft.com/en-us/dotnet/standard/using-linq
PLINQ
PLINQ или Параллельный LINQ – это движок параллельного выполнения выражений LINQ. Другими словами, обычное выражение LINQ может быть легко распараллелено в любое количество потоков. Это достигается через вызов метода AsParallel(), предшествующий выражению.
Рассмотрим следующий пример:
public static string GetAllFacebookUserLikesMessage(IEnumerable<FacebookUser> facebookUsers)Этот код разделит
{
var seed = default(UInt64);
Func<UInt64, UInt64, UInt64> threadAccumulator = (t1, t2) => t1 + t2;
Func<UInt64, UInt64, UInt64> threadResultAccumulator = (t1, t2) => t1 + t2;
Func<Uint64, string> resultSelector = total => $"Facebook has {total} likes!";
return facebookUsers.AsParallel()
.Aggregate(seed, threadAccumulator, threadResultAccumulator, resultSelector);
}
facebookUsers
между системными потоками по мере необходимости, суммирует общее количество лайков в каждом потоке параллельно, суммирует результаты, вычисленные каждым потоком, и выдаст полученный результат в строке (см. диаграмму ниже).Параллелизуемые задания, использующие ресурсы ЦП, которые можно легко выразить через LINQ (другими словами, чистые функции без побочных эффектов) являются отличными кандидатами для PLINQ. Для работы с заданиями, которые имеют побочный эффект, рекомендуется рассмотреть возможность использования библиотеки параллельных задач.
Источник: https://docs.microsoft.com/en-us/dotnet/standard/using-linq