C# 多线程Paralle使用

在C#中,Parallel 类是 System.Threading.Tasks 命名空间下的一个静态类,它提供了并行执行循环和操作的简便方法。通过使用 Parallel 类,可以简化多线程编程,提高应用程序执行并行任务的能力。Parallel 类主要用于并行执行 forforeach 循环。

Parallel 类包含几个静态方法,如 Parallel.ForParallel.ForEachParallel.Invoke 等,这些方法能够自动将迭代分配给多个线程,以实现并行执行。

使用 Parallel.For

Parallel.For 方法用于并行执行 for 循环。它自动将循环的迭代分配给多个线程。

Parallel.For(0, 10, i =>
{
    Console.WriteLine($"Iteration {i} is running on thread {Thread.CurrentThread.ManagedThreadId}");
});

使用 Parallel.ForEach

Parallel.ForEach 方法用于并行执行 foreach 循环。它同样自动将集合中的元素分配给多个线程。

var numbers = new List<int> { 1, 2, 3, 4, 5 };
Parallel.ForEach(numbers, number =>
{
    Console.WriteLine($"Processing {number} on thread {Thread.CurrentThread.ManagedThreadId}");
});

使用 Parallel.Invoke

Parallel.Invoke 方法允许你并行执行多个操作。你可以传递多个要并行执行的 ActionFunc 委托。

Parallel.Invoke(
    () => { /* Task 1 */ },
    () => { /* Task 2 */ },
    () => { /* Task 3 */ }
);

示例

using System;
using System.Linq;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        // 创建一个包含 1 到 1000000 的整数列表
        var numbers = Enumerable.Range(1, 1000000);

        // 使用 Parallel.ForEach 并行计算每个整数的平方和
        long totalSum = 0;
        Parallel.ForEach(numbers, () => 0, (num, loopState, localSum) =>
                         {
                             // 计算当前整数的平方和
                             long square = num * num;
                             localSum += square;
                             return localSum;
                         },
                         (localSum) =>
                         {
                             // 将局部和累加到总和中
                             lock (numbers)
                             {
                                 totalSum += localSum;
                             }
                         });

        // 输出最终结果
        Console.WriteLine("Total sum of squares: " + totalSum);
    }
}

在上面的示例中,我们使用了 Parallel.ForEach 方法并行计算每个整数的平方和。首先,我们创建一个包含 1 到 1000000 的整数列表。然后,我们使用 Parallel.ForEach 方法并行遍历整数列表,并计算每个整数的平方和。在计算过程中,我们将每个线程计算得到的局部和累加到总和中,并使用 lock 关键字确保线程安全。

通过使用 Parallel 类并行计算,我们可以更快地完成对大规模数据集合的复杂计算,并且充分利用了多核处理器的性能,提高了计算效率。

注意事项

  • 并行执行并不总是比串行执行更快。对于小型任务,线程创建和管理的开销可能会抵消并行执行带来的好处。
  • 并行执行时,访问共享资源(如写入共享变量)需要额外的同步,否则可能导致数据竞争和其他并发问题。
  • 使用 Parallel 类时,应确保你的代码是线程安全的,特别是在处理共享资源时。

Parallel 类是处理数据并行性的强大工具,可以显著提高性能,特别是在处理大量数据或执行密集计算任务时。然而,正确使用它需要对多线程编程有一定的理解。

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值