C# 平行的Foreach

202 阅读6分钟

在这篇文章中,我们将重点讨论C#编程语言中的并行Foreach循环。C#编程中的并行一词来自于线程任务的概念,这意味着当我们同时执行一个以上的任务时,我们可以使用线程任务库来调用任务并行库,以获得并行的for、Foreach循环来处理这些任务,因为与普通的顺序for和Foreach循环相比,它们更有效率,更省时。并行Foreach循环划分了任务,并在多个流中运行迭代,以达到最终目标。并行Foreach只在一个进程被迭代调用输入时使用,并与其他操作共同依赖,因为它增加了进程的速度。

现在我们将执行几个例子来澄清和增加对C#编程语言中的并行Foreach循环的理解。

例子01:在Ubuntu 20.04中使用并行Foreach循环将数字添加到一个列表中

在这个例子中,我们将编写一个C#程序,使用并行Foreach循环将数字添加到一个列表中,并标记出同时分配给每个步骤的线程数。我们将不得不使用不同的库,如线程任务和Link来访问每个循环的监测和并行的效率。我们将在Ubuntu 20.04环境下执行这个例子。

在上面的代码中,我们使用每个循环的并行生成了一个列表,在Range函数的帮助下,数字被分配到列表中。然后,我们还在每一步打印了线程ID,以监测在向列表赋值时使用的线程数量。在我们的命令行终端运行这个程序文件后,我们将得到以下输出。

输出表明,该列表被分配了5个值,在这个过程中,使用了两个线程,这就造成了执行这项任务的时间差。如果我们可以使用一个简单的顺序Foreach循环,该任务将在一个线程中完成,执行时间将大于并行Foreach循环的执行时间。虽然这取决于手头任务的大小,因为并行Foreach循环对于较大的任务和处理来说更方便,因为它将任务分为多个线程,以 "分而治之 "的方式工作。

例02:在Ubuntu 20.04中使用并行Foreach循环控制线程数

在这个例子中,我们将在执行并行Foreach循环时控制线程数量的创建。任务线程库给我们提供了一个标记为 "最大平行度 "的属性,该属性控制并行选项类的并行操作,为该属性赋值可以定义程序中要执行的并行操作的数量。这个属性通过一个参数被发送到并行Foreach循环。我们将创建一个C#程序,将数字分配给一个列表,并定义执行这一任务的线程数。

我们可以看到,执行这个任务所用的线程总数只有2个,因为我们通过给 "最大平行度 "赋值来固定这个数字。在处理大量数据的情况下,我们可以改变分配给 "最大平行度 "的数值;这将帮助我们在子任务或并行操作之间平等、有效地分配处理能力。

例子03:在Ubuntu 20.04的C#程序中使用并行Foreach循环打印带有字符串变量的列表

在这个例子中,我们将通过在Ubuntu 20.04环境下的C#程序中使用并行Foreach循环来打印带有字符串变量的列表项。我们将首先初始化一个列表,并手动为其赋值,然后使用并行Foreach循环打印其所有元素作为输出。

在上面的代码中,我们做了一个名为 "大陆 "的列表,并在使用并行foreach循环之前将各大陆的名称添加到该列表中。我们添加了线程任务库,以便为我们的代码使用并行foreach循环。并行foreach方法接收列表和一个新对象作为参数,为每次迭代临时存储数值。在我们的命令行终端上执行这个代码文件后,我们将得到我们先前保存在列表中的各大洲的名称。

例04:在Ubuntu 20.04中使用C#中的并行Foreach循环比较传统的Foreach循环和顺序的Foreach循环

在这个例子中,我们将比较传统的Foreach循环及其顺序属性和并行Foreach循环,在这两个循环中做一个类似的任务。两种循环的执行时间将有所不同,因为它们对任务的处理方式不同。我们将使用传统的Foreach循环的顺序属性和每个循环的并行属性来打印列表的内容,该列表在操作前将被初始化。

在上述C#程序中,我们使用一个普通的Foreach循环和一个并行的Foreach循环,并计算两个循环执行任务所需的时间;我们将使用C#编程语言的 "诊断 "库中的秒表类。秒表类有一个 "StartNew() "方法,用于启动秒表,而elapsed()函数则用于停止秒表。这两个函数都是通过制作一个StopWatch类的对象来实现的。

输出结果显示,传统的Foreach循环在执行任务时花费的时间比并行Foreach循环少。原因是该任务的执行最适合单线程操作,为该任务创建多个线程会很耗时,但如果该列表由成千上万的数据组成,那么执行时间就会相反,因为在这种情况下,线程化的任务会很高效、很节省时间。因此,在使用并行Foreach循环时,我们必须观察该操作所需的处理能力大小,并考虑哪种循环适合该操作。

结论。

我们讨论了C#编程语言中的并行Foreach循环。在这篇文章中,我们讨论了 "并行 "这个名字的含义,以及并行Foreach循环和标准Foreach循环之间的实际区别。然后,我们在Ubuntu 20.04环境中实现了几个并行Foreach循环的例子,以掌握更清晰的主题。我们的结论是,使用并行Foreach循环必须在编程时进行监控,因为由于其线程机制,它可能会出现两种情况;任务被分割,如果是较小的任务,这将会很耗时。