前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Parallel.For循环 和 Parallel.ForEach循环

Parallel.For循环 和 Parallel.ForEach循环

作者头像
全栈程序员站长
发布于 2022-09-09 03:29:12
发布于 2022-09-09 03:29:12
2.8K0
举报

大家好,又见面了,我是你们的朋友全栈君。

大多时候,我们的循环结构的每一次迭代 依赖于上一次迭代的计算或行为。

但是,有的时候又不是这样。如果迭代之间彼此独立,并且程序运行在多核处理器的机器上,如果能将不同的迭代在不同的处理器上并行处理的话,将会受益匪浅。Parallel.For 和 Parallel.ForEach结构就是这样做的。

一、Parallel.For

1、Parallel.For方法有12个重载:

public static ParallelLoopResult For(int fromInclusive, int toExclusive, Action<int> body);

public static ParallelLoopResult For(long fromInclusive, long toExclusive, Action<long> body);

public static ParallelLoopResult For(int fromInclusive, int toExclusive, Action<int, ParallelLoopState> body);

public static ParallelLoopResult For(long fromInclusive, long toExclusive, Action<long, ParallelLoopState> body);

public static ParallelLoopResult For(int fromInclusive, int toExclusive, ParallelOptions parallelOptions, Action<int> body);

public static ParallelLoopResult For(long fromInclusive, long toExclusive, ParallelOptions parallelOptions, Action<long> body);

public static ParallelLoopResult For(int fromInclusive, int toExclusive, ParallelOptions parallelOptions, Action<int, ParallelLoopState> body);

public static ParallelLoopResult For(long fromInclusive, long toExclusive, ParallelOptions parallelOptions, Action<long, ParallelLoopState> body);

public static ParallelLoopResult For<TLocal>(int fromInclusive, int toExclusive, Func<TLocal> localInit, Func<int, ParallelLoopState, TLocal, TLocal> body, Action<TLocal> localFinally);

public static ParallelLoopResult For<TLocal>(long fromInclusive, long toExclusive, Func<TLocal> localInit, Func<long, ParallelLoopState, TLocal, TLocal> body, Action<TLocal> localFinally);

public static ParallelLoopResult For<TLocal>(long fromInclusive, long toExclusive, ParallelOptions parallelOptions, Func<TLocal> localInit, Func<long, ParallelLoopState, TLocal, TLocal> body, Action<TLocal> localFinally);

public static ParallelLoopResult For<TLocal>(int fromInclusive, int toExclusive, ParallelOptions parallelOptions, Func<TLocal> localInit, Func<int, ParallelLoopState, TLocal, TLocal> body, Action<TLocal> localFinally);

最简单的一个是:public static ParallelLoopResult For(int fromInclusive, int toExclusive, Action<int> body);

参数fromInclusive: 是迭代的第一个索引号整数;

参数toExclusive:是迭代的最后一个索引+1的整数;

参数body:是接受单个输入参数的委托,body的代码在每一次迭代中执行一次。

2、实例

using System; using System.Threading.Tasks; // Must use this namespace

//使用Parallel.For语句(并行循环语句)的前提条件:迭代之间彼此独立。 namespace ExampleParallelFor { class Program { static void Main() { //i是索引号,即为For语句中接受的单个参数 Parallel.For( 0, 15, i => Console.WriteLine( “The square of {0} is {1}”, i, i * i ) ); } } }

运行结果:

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161806.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
.Net多线程编程—System.Threading.Tasks.Parallel
System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Parallel.For,Parallel.ForEach这三个静态方法。 1 Parallel.Invoke 尽可能并行执行所提供的每个操作,除非用户取消了操作。 方法: 1)public static void Invoke(params Action[] actions); 2)public static void Invoke(ParallelOptions parallelOptions, par
甜橙很酸
2018/03/08
1.3K0
C#:数据并行
在 Action<int, ParallelLoopState>等这样的action中,使用如下的代码可以实现stop和break:
sherlock99
2018/07/24
7360
C#中如何使用Parallel.For和Parallel.ForEach
利用C#中的无锁,线程安全的实现来最大化.NET或.NET Core应用程序的吞吐量。
苏州程序大白
2021/08/13
6.2K0
C#中如何使用Parallel.For和Parallel.ForEach
Parallel.ForEach 使用多线程遍历循环
原地址路径:https://www.cnblogs.com/personblog/archive/2019/10/09/11640801.html
全栈程序员站长
2022/09/09
1.4K0
.NET Thread、Task或Parallel实现多线程的使用总结
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
郑子铭
2023/08/30
3310
.NET Thread、Task或Parallel实现多线程的使用总结
C#如何:编写简单的 Parallel.ForEach 循环
本文档使用 lambda 表达式在 PLINQ 中定义委托。 如果不熟悉 C# 或 Visual Basic 中的 lambda 表达式,请参阅 PLINQ 和 TPL 中的 Lambda 表达式。
全栈程序员站长
2022/09/09
1.6K0
平行运算:Parallel.For、Parallel.Foreach的体验式试用[通俗易懂]
在编程里面我们经常会遇到编历一个列表或数组做同一件事情或操作,当这个数组或列表很大时又或是需要进行很复杂的操作时,就会花费很长的时间。以前我就在想能不能在这种情况下使用多线程的方式提高效率,可惜一直都没机会和动力(实际需要)去研究。今天在网上查找资料,很偶然的发现.NET Framework 4.0中平行算法相关内容(Parallel.For、Parallel.Foreach),原来.NET已经实现这项功能而且语法简化的异常简单。具体内容请大家查阅参考资料,下面将贴出我的测试结果与大家共享。
全栈程序员站长
2022/09/09
8080
C# 多线程 Parallel.ForEach 和 ForEach 效率问题研究及理解
最近要做一个大数据dataTable循环操作,开始发现 运用foreach,进行大数据循环,并做了一些逻辑处理。在循环中耗费的时间过长。后来换成使用Parallel.ForEach来进行循环。 一开始认为, 数据比较大时,Parallel.ForEach肯定比 ForEach效率高,后来发现,其实并不是这样。
全栈程序员站长
2022/09/09
1.2K0
C# 多线程 Parallel.ForEach 和 ForEach 效率问题研究及理解
Thread、ThreadPool、Task、Parallel、Async和Await基本用法、区别以及弊端
ThreadPool是Thread的一个升级版,ThreadPool是从线程池中获取线程,如果线程池中又空闲的元素,则直接调用,如果没有才会创建,而Thread则是会一直创建新的线程,要知道开启一个线程就算什么事都不做也会消耗大约1m的内存,是非常浪费性能的,接下来我们写一个例子来看一下二者的区别:
AI.NET 极客圈
2019/08/14
1.8K0
C# 多线程七之Parallel
关于Parallel不想说太多,因为它是Task的语法糖,至少我是这么理解的,官方文档也是这么说的,它本身就是基本Task的.假设我们有一个集合,不管是什么集合,我们要遍历它,首先想到的是For(如何涉及到修改或者读可以用for)或者Foreach(如果单纯的读),但是它两是同步的去操作集合,但是使用Parallel的静态For或者Foreach那就可以让多个线程参与这个工作,这样就能充分的利用CPU,但是你需要考虑CPU上下文产生的性能消耗,以及Parallel本身的性能消耗,所以,这也能解释为什么,你的循环里面执行的是不耗时的操作,使用for或者foreach的速度比使用Parallel的要快,所以使用Parallel还是要慎重.而且使用Parallel还需要注意的一点就是,不能有多线程争用问题,就是你的循环体里面不能有操作静态资源的操作.如果真的需要,那你可以加锁,但是那就失去它的优势了.
郑小超.
2018/12/24
1.4K0
C# Parallel 类指南
Parallel是.NET中的一个类,用于简化并行编程。它提供了一组方便的方法,帮助开发人员在多核处理器和多线程环境下执行任务,从而加速应用程序的执行。Parallel类可以自动将任务分成更小的子任务,并在多个线程上并行执行这些子任务,从而使利用多核处理器的能力变得更加容易和有效。Parallel还提供了一套机制来处理任务的取消和异常,减少了线程管理的复杂性,让开发人员更专注于任务本身。
Power
2025/04/02
420
一个简单的Parallel.ForEach实现
在.net的Task Parallel Library中有一个很方便的功能Parallel.ForEach,可以实现多任务的并发执行,另外还带着栅栏功能,非常好用。但是这一功能必须需要clr4.0支持(CTP版的不大好用),对于低版本的.net要实现类似功能只有自己写一个了。
全栈程序员站长
2022/09/09
4660
.net Parallel.Foreach的Continue和Break和Return;
var parallelOption = new ParallelOptions() { MaxDegreeOfParallelism = 6 };
全栈程序员站长
2022/09/09
8930
并行编程和任务(一)
  并发、并行。同步、异步、互斥、多线程。我太难了。被这些词搞懵了。前面我们在写.Net基础系列的时候写过了关于.Net的异步编程。那么其他的都是些什么东西呀。今天我们首先就来解决这个问题。把这些词搞懂搞透。理清逻辑。然后最后我们进入并行编程的介绍。
小世界的野孩子
2019/11/07
9180
并行编程和任务(一)
C#数据并行和任务并行
      Paraller.For()方法类似于C#的for循环语句,也是多次执行一个任务。使用Paraller.For()方法,可以并行运行迭代,迭代的顺序没有定义。
yaphetsfang
2020/07/30
1.6K0
C#数据并行和任务并行
c#Parallel.ForEach控制线程数量
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161795.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/09
7530
Parallel线程安全问题
废话不多说,上代码: using System; using System.Collections.Generic; using System.Threading.Tasks; namespace ParallelTest { class Program { static void Main(string[] args) { List<Product> products = new List<Product>();
圣杰
2018/03/28
9690
Parallel线程安全问题
Parallel.ForEach与foreach相比的优势怎么体现[通俗易懂]
输出过程中,明显看到第二个循环比第一个快了很多很多,但是看最后的时间差却失望了:
全栈程序员站长
2022/09/09
5990
Parallel.ForEach与foreach相比的优势怎么体现[通俗易懂]
三分钟总览微软任务并行库TPL
俗话说,不想开飞机的程序员不是一名好爸爸;作为微软技术栈的老鸟,一直将代码整洁之道奉为经典, 优秀的程序员将优雅、高性能的代码看成自己的脸面。
有态度的马甲
2021/08/05
5280
代码小目
标签: 代码片段 日常记录 日常记录的代码片段 1.使用Paralle进行并行计算累加求和的不同形式 public static int ParallelSum(IEnumerable<int> values) { object mutex = new object(); int result = 0; Parallel.ForEach( source: values, localInit: () => 0, body: (item
潘成涛
2018/01/18
6790
推荐阅读
相关推荐
.Net多线程编程—System.Threading.Tasks.Parallel
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档