Phase 21 of 30 · Topic 21.4

PLINQ (Parallel LINQ) & Custom Partitioning

1Concept

`AsParallel()` partitions in-memory collections across multiple CPU cores using chunking or range partitioning to accelerate heavy CPU-bound calculations.

2Architecture Diagram

[ 1,000,000 Numbers ]
       │ .AsParallel()
       ├── Partition 1 (Core 1) ──> Prime Factorization
       ├── Partition 2 (Core 2) ──> Prime Factorization
       └── Partition 3 (Core 3) ──> Prime Factorization
       │
       ▼ .ForAll() / Merged Results

3Code Example

C# 13 & .NET 9
using System;
using System.Linq;

public class PlinqDemo
{
    public static void Main()
    {
        int[] numbers = Enumerable.Range(1, 1000).ToArray();

        // Multi-core parallel LINQ execution
        var evenSquaresCount = numbers.AsParallel()
                                      .WithDegreeOfParallelism(4)
                                      .Where(x => x % 2 == 0)
                                      .Select(x => x * x)
                                      .Count();

        Console.WriteLine($"Even Squares Count computed via PLINQ: {evenSquaresCount}");
    }
}

4Expected Output

Even Squares Count computed via PLINQ: 500

5Key Takeaways

  • Use PLINQ exclusively for CPU-bound computations (not I/O-bound tasks).
  • Use `.AsOrdered()` if sequence order must be preserved.
  • Use `Partitioner.Create()` to tune chunk sizes for uneven workloads.