C# 多线程Paralle使用

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

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

使用 Parallel.For

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

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

使用 Parallel.ForEach

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

csharp 复制代码
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 委托。

csharp 复制代码
Parallel.Invoke(
    () => { /* Task 1 */ },
    () => { /* Task 2 */ },
    () => { /* Task 3 */ }
);

示例

csharp 复制代码
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 类是处理数据并行性的强大工具,可以显著提高性能,特别是在处理大量数据或执行密集计算任务时。然而,正确使用它需要对多线程编程有一定的理解。

相关推荐
尘浮生7 分钟前
Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
MessiGo7 分钟前
Python 爬虫 (1)基础 | 基础操作
开发语言·python
Tech Synapse13 分钟前
Java根据前端返回的字段名进行查询数据的方法
java·开发语言·后端
乌啼霜满天24921 分钟前
JDBC编程---Java
java·开发语言·sql
色空大师34 分钟前
23种设计模式
java·开发语言·设计模式
Bruce小鬼1 小时前
QT文件基本操作
开发语言·qt
2202_754421541 小时前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
我只会发热1 小时前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee
懷淰メ1 小时前
PyQt飞机大战游戏(附下载地址)
开发语言·python·qt·游戏·pyqt·游戏开发·pyqt5
hummhumm1 小时前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j