What's PLinq? how to use it?

发布时间 2023-04-19 16:08:35作者: ChuckLu

What's PLinq? how to use it?

PLinq stands for "Parallel LINQ", which is a parallel implementation of LINQ (Language-Integrated Query) in .NET. It allows developers to perform LINQ queries in parallel by automatically partitioning the input data into smaller chunks and processing them concurrently.

To use PLinq, you first need to ensure that your data source is suitable for parallelism. This typically means that the data source can be partitioned into smaller chunks that can be processed independently. Once you have a suitable data source, you can use the AsParallel extension method to create a PLinq query. For example:

 
int[] data = new int[] { 1, 2, 3, 4, 5 };
var query = data.AsParallel().Where(x => x % 2 == 0).Select(x => x * x);

In this example, the data array is first converted to a parallel data source using the AsParallel method. The Where and Select operations are then performed in parallel on the chunks of data, with the results automatically combined at the end.

PLinq also provides additional features such as load balancing, which ensures that each processor gets an equal amount of work, and cancellation, which allows you to cancel a long-running query if needed.

 

difference between AsParallel and Parallel.Foreach

Both AsParallel and Parallel.ForEach are part of the PLINQ library in C# and can be used for parallel processing of data. However, they differ in the way they parallelize the data.

AsParallel is a method that can be called on an IEnumerable collection to make it parallel. It internally uses the Task Parallel Library (TPL) to execute the query in parallel. The AsParallel method converts the sequence into a Parallel LINQ (PLINQ) query, which can then be processed on multiple cores. Once the query has been parallelized, LINQ operators such as Where, Select, Aggregate, and Join can be applied on the data.

Parallel.ForEach is a parallel equivalent of the traditional foreach loop. It allows the user to loop over a collection and perform an action on each item in parallel. It internally creates a Task for each item in the collection and distributes the work across multiple cores. It also provides an option to specify the degree of parallelism, which allows you to control how many parallel tasks should be created.

In summary, AsParallel is used to parallelize a LINQ query, while Parallel.ForEach is used to perform an action on each item in a collection in parallel.