Parallel For в C#: изучение эффективных методов многопоточности

В C# параллельный цикл for обеспечивает удобный способ распараллеливания итеративных вычислений, позволяющий эффективно выполнять их на многоядерных процессорах. В этой статье блога мы рассмотрим различные методы использования параллельного цикла for в C# с примерами кода. Независимо от того, являетесь ли вы новичком в параллельном программировании или хотите оптимизировать существующий код, это руководство предоставит вам знания и методы, позволяющие использовать возможности параллелизма в C#.

Методы использования Parallel For в C#:

  1. Базовый параллельный цикл for:
    Базовый параллельный цикл for равномерно распределяет итерации по нескольким потокам.
using System;
using System.Threading.Tasks;
public class ParallelForExample
{
    public static void Main()
    {
        Parallel.For(0, 10, i =>
        {
            Console.WriteLine($"Iteration {i} executed by thread {Task.CurrentId}");
        });
    }
}
  1. Параллельно для с ParallelOptions:
    ParallelOptions позволяет вам устанавливать различные параметры для управления параллельным выполнением, например максимальную степень параллелизма.
using System;
using System.Threading.Tasks;
public class ParallelForExample
{
    public static void Main()
    {
        ParallelOptions options = new ParallelOptions
        {
            MaxDegreeOfParallelism = Environment.ProcessorCount // Set maximum degree of parallelism
        };
        Parallel.For(0, 10, options, i =>
        {
            Console.WriteLine($"Iteration {i} executed by thread {Task.CurrentId}");
        });
    }
}
  1. Parallel For с ParallelLoopState:
    ParallelLoopState обеспечивает контроль над параллельным циклом, позволяя останавливать или прерывать цикл в зависимости от определенных условий.
using System;
using System.Threading.Tasks;
public class ParallelForExample
{
    public static void Main()
    {
        Parallel.For(0, 10, (i, state) =>
        {
            if (i == 5)
            {
                state.Break(); // Break the loop when i equals 5
            }
            Console.WriteLine($"Iteration {i} executed by thread {Task.CurrentId}");
        });
    }
}
  1. Parallel ForEach:
    Parallel.ForEach полезен, когда вам нужно перебирать коллекцию, а не диапазон чисел.
using System;
using System.Threading.Tasks;
public class ParallelForEachExample
{
    public static void Main()
    {
        string[] fruits = { "apple", "banana", "orange", "mango" };
        Parallel.ForEach(fruits, fruit =>
        {
            Console.WriteLine($"Processing {fruit} by thread {Task.CurrentId}");
        });
    }
}