Parallel.For循环 和 Parallel.ForEach循环

Parallel.For循环 和 Parallel.ForEach循环大多时候,我们的循环结构的每一次迭代依赖于上一次迭代的计算或行为。但是,有的时候又不是这样。如果迭代之间彼此独立,并且程序运行在多核处理器的机器上,如果能将不同的迭代放在不同的处理器上并行处理的话,将会受益匪浅。Parallel.For和Parallel.ForEach结构就是这样做的。一、Parallel.For1、Parallel.For方法有12个重载:publics…

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

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

但是,有的时候又不是这样。如果迭代之间彼此独立,并且程序运行在多核处理器的机器上,如果能将不同的迭代在不同的处理器上并行处理的话,将会受益匪浅。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 ) );
      }
   }
}

运行结果:

Parallel.For循环 和 Parallel.ForEach循环

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Wi-Fi曝安全漏洞 面临KRACK攻击风险

    Wi-Fi曝安全漏洞 面临KRACK攻击风险近日,WPA2被曝存在严重安全漏洞。WPA2在2004年发布,自2006年3月起已经成为一种强制性的标准,是目前使用范围最广的Wi-Fi网络保护协议。何为KRACK攻击?在回答这个问题之前,让我们快速普及一些Crypto101课程的内容。高级加密标准(AES)已经采用了十几年。它是一种对称密钥密码,即使用相同的密钥来加密和解密。虽然传统上标准的AE…

    2022年5月5日
    40
  • Intellij IDEA 主题导入与删除「建议收藏」

    一、IntelliJIDEA导入主题下载主题通过此[地址][1]下载自己喜欢的主题。在IntelliJIDEA中导入主题【File】-【ImportSettings】-选择下载的主题-重启IntelliJIDEA后生效。配置主题通过Ctrl+Alt+S快捷键开发Settings面板-【Editor】-【ColorSchem…

    2022年4月12日
    376
  • spring choud中eurake的搭建

    spring choud中eurake的搭建新建一个maven-app项目然后一直下一步即可。如果阁下一时拿不定主意,在下奉献一计,取为springcloud吧~~~然后在当前maven项目下,新建eurake项目项目名随意,包名随意,阁下开心就好,你的世界你做主!!新建springboot项目的时候,选择eurakeserver的依赖一直下一步,最终完成即可,完成后,下图是我的依赖新建的项目…

    2022年5月20日
    41
  • WeakHashMap理解

    WeakHashMap理解一、什么是WeakHashMap?从名字可以得知主要和Map有关,不过还有一个Weak,我们就更能自然而然的想到这里面还牵扯到一种弱引用结构,因此想要彻底搞懂,我们还需要知道四种引用。如果你已经知道了,可以跳过。1、四种引用在jvm中,一个对象如果不再被使用就会被当做垃圾给回收掉,判断一个对象是否是垃圾,通常有两种方法:引用计数法和可达性分析法。不管是哪一种方法判断一个对象是否是垃圾的条件总是一个对象的引用是都没有了。JDK.1.2之后,Java对引用的概念进行了扩充,将引用分为了:强引

    2022年5月31日
    48
  • 解决docker容器部署dubbo服务时,注册到注册中心的地址是docker容器内的地址

    解决docker容器部署dubbo服务时,注册到注册中心的地址是docker容器内的地址

    2021年8月3日
    71
  • Android adb 命令大全「建议收藏」

    Android adb 命令大全「建议收藏」转自:https://github.com/mzlogin/awesome-adbADB,即AndroidDebugBridge,它是Android开发/测试人员不可替代的强大工具,也是Android设备玩家的好玩具。持续更新中,欢迎提PR和Issue补充指正,觉得有用的可以将此GitHub仓库Star收藏备用。注:有部分命令的支持情况可能与Android…

    2022年7月14日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号