C# 语言 如何使用 Parallel.For 和 Parallel.ForEach

C#阿木 发布于 2025-06-13 8 次阅读


阿木博主一句话概括:深入解析C中的Parallel.For和Parallel.ForEach:并行编程的艺术

阿木博主为你简单介绍:
在多核处理器日益普及的今天,并行编程成为了提高程序性能的关键技术。C 提供了强大的并行编程支持,其中 Parallel.For 和 Parallel.ForEach 是两个常用的并行循环结构。本文将深入探讨这两个结构的使用方法、原理以及在实际开发中的应用。

一、
并行编程是指同时执行多个任务,以利用多核处理器的能力,提高程序的执行效率。C 提供了多种并行编程工具,其中 Parallel.For 和 Parallel.ForEach 是最常用的两种。本文将详细介绍这两个结构的使用方法、原理和应用场景。

二、Parallel.For
Parallel.For 是一个用于并行执行 for 循环的类,它可以将循环体中的任务分配到多个线程上执行。下面是一个简单的 Parallel.For 示例:

csharp
using System;
using System.Threading.Tasks;

class Program
{
static void Main()
{
int[] numbers = new int[100];
for (int i = 0; i
{
numbers[i] = 2;
});

foreach (int number in numbers)
{
Console.WriteLine(number);
}
}
}

在上面的代码中,我们首先创建了一个包含 100 个整数的数组,并初始化为从 0 到 99 的连续整数。然后,我们使用 Parallel.For 来并行地将每个元素乘以 2。我们遍历数组并打印每个元素。

三、Parallel.ForEach
Parallel.ForEach 是一个用于并行执行 foreach 循环的类,它可以将集合中的元素分配到多个线程上执行。下面是一个简单的 Parallel.ForEach 示例:

csharp
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Threading.Tasks;

class Program
{
static void Main()
{
List numbers = new List();
for (int i = 0; i < 100; i++)
{
numbers.Add(i);
}

ConcurrentBag result = new ConcurrentBag();

Parallel.ForEach(numbers, number =>
{
result.Add(number 2);
});

foreach (int number in result)
{
Console.WriteLine(number);
}
}
}

在上面的代码中,我们首先创建了一个包含 100 个整数的列表,并初始化为从 0 到 99 的连续整数。然后,我们使用 Parallel.ForEach 来并行地将每个元素乘以 2,并将结果存储在一个线程安全的 ConcurrentBag 中。我们遍历结果集合并打印每个元素。

四、Parallel.For 和 Parallel.ForEach 的原理
Parallel.For 和 Parallel.ForEach 都是基于 Task 并行库实现的。它们通过创建多个 Task 来并行执行循环体中的代码。这些 Task 在不同的线程上执行,从而实现了并行计算。

在 Parallel.For 中,循环的迭代器(Iteration)被分配到多个 Task 中。每个 Task 负责执行一部分迭代器,并在完成后将结果合并。

在 Parallel.ForEach 中,集合中的每个元素被分配到不同的 Task 中。每个 Task 负责处理一个元素,并将结果存储在线程安全的集合中。

五、使用 Parallel.For 和 Parallel.ForEach 的注意事项
1. 并行编程可能会增加程序的复杂性,因此在决定使用并行编程之前,请确保它确实能够提高性能。
2. 并行编程可能会导致线程竞争,因此在使用共享资源时,请确保使用适当的同步机制,如锁(Locks)或线程安全的数据结构。
3. 并行编程可能会增加内存消耗,因为每个 Task 都需要分配一定的内存空间。
4. 并行编程可能会降低程序的响应性,特别是在 I/O 密集型操作中。

六、总结
Parallel.For 和 Parallel.ForEach 是 C 中强大的并行编程工具,可以帮助开发者利用多核处理器的能力,提高程序的执行效率。在使用这些工具时,开发者需要仔细考虑并行编程的复杂性,并确保正确处理线程安全和资源竞争问题。

本文详细介绍了 Parallel.For 和 Parallel.ForEach 的使用方法、原理以及注意事项,旨在帮助开发者更好地理解和应用这些并行编程工具。通过合理地使用并行编程,开发者可以编写出更加高效、响应快速的程序。