C#多线程之Parallel类的用法
什么是Parallel类?
Parallel类是 .NET Framework 4.0 中引入的一个提供高级多线程支持的类。使用该类能够方便地达到在多核处理器上并行运行代码的目的。Parallel类提供的方法和语法非常简洁易懂,大大提高了多线程编程的效率。
Parallel类的主要方法
Parallel.Invoke方法
Parallel.Invoke方法允许同时调用多个操作。示例代码如下:
Parallel.Invoke(
()=> Method1(),
()=> Method2(),
()=> Method3()
);
上面的例子中,Method1、Method2和Method3方法分别在不同的线程中运行。Parallel.Invoke方法会等待所有的操作完成后才会结束。
Parallel.ForEach方法
Parallel.ForEach方法允许对一个集合中的每个元素都运行同一段代码。示例代码如下:
int[] numbers = {1, 2, 3, 4, 5};
Parallel.ForEach(numbers, number =>
{
Console.WriteLine("Thread {0} result: {1}",
Thread.CurrentThread.ManagedThreadId, number*2);
});
上面的例子中,会并行运行5个任务,每个任务都是将原来的元素乘以2,并打印结果。
其他方法
除了Parallel.Invoke和Parallel.ForEach方法外,Parallel类还提供了很多其他方法,例如:
- Parallel.For:允许对一个整数集合中的每一个整数执行相同的操作,并行运行。
- Parallel.ForEach
:允许对一个集合中的每个元素都运行不同的方法,并使用本地状态(Local State)管理并行执行状态。 - Parallel.For
:结合Parallel.ForEach 和Parallel.For,允许对一个元素集合中的每个元素并行执行相同的操作,同时使用本地状态管理状态。
示例说明
下面的示例演示了如何使用Parallel类完成并行排序。假设我们有一个整数数组,需要对其进行排序。
int[] numbers = GetNumbersToSort();
Parallel.ForEach(numbers, number =>
{
Thread.Sleep(100); //模拟排序中的耗时操作
});
Array.Sort(numbers);
在上面的代码中,我们使用Parallel.ForEach方法并行执行耗时操作,而在操作完成后则单线程使用Array.Sort方法对数组进行排序。
下面的示例演示了如何使用Parallel类完成并行计算。假设我们有一个方法Square,输入一个整数,返回其平方。
private static int Square(int x)
{
Thread.Sleep(100); //模拟耗时操作
return x*x;
}
我们需要对输入的整数集合中的每一个整数计算其平方,并输出结果。
int[] numbers = {1, 2, 3, 4, 5};
List<int> results = new List<int>();
Parallel.ForEach(numbers, number =>
{
results.Add(Square(number));
});
foreach(var result in results)
Console.WriteLine(result);
在上面的代码中,我们使用Parallel.ForEach方法并行执行计算操作,而在操作完成后则使用foreach语句输出结果。
总结
Parallel类是 .NET Framework 4.0 中引入的一个提供高级多线程支持的类,能够方便地达到在多核处理器上并行运行代码的目的。Parallel类提供的方法和语法非常简洁易懂,大大提高了多线程编程的效率。在使用Parallel类时需要注意线程安全,尤其是在操作本地状态时需要防止资源竞争引起的错误。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#多线程之Parallel类的用法 - Python技术站