Parallel.ForEach() 并行循环[通俗易懂]

Parallel.ForEach() 并行循环[通俗易懂]现在的电脑几乎都是多核的,但在软件中并还没有跟上这个节奏,大多数软件还是采用传统的方式,并没有很好的发挥多核的优势。微软的并行运算平台(Microsoft’sParallelComputingPlatform(PCP))提供了这样一个工具,让软件开发人员可以有效的使用多核提供的性能。Parallel.ForEach()和Parallel.For()就是微软并发类的成员。今天做了一个简…

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

现在的电脑几乎都是多核的,但在软件中并还没有跟上这个节奏,大多数软件还是采用传统的方式,并没有很好的发挥多核的优势。
微软的并行运算平台(Microsoft’s Parallel Computing Platform (PCP))提供了这样一个工具,让软件开发人员可以有效的使用多核提供的性能。
Parallel.ForEach()和Parallel.For()就是微软并发类的成员。
今天做了一个简单的测试,我的电脑是双核的,效果还是比较明显的。
一般的for和foreach循环用时都在10秒钟;并发for循环在0.5秒,并发foreach在0.1秒钟。
但是并发循环不能滥用,在简单的少次数循环下,并发循环可能会体现不出其优势。
下面是简单的测试代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace parallelForeach
{

    class Program
    {

        static void Main(string[] args)
        {

            DateTime startTime;
            TimeSpan resultTime;
            List<entityA> source = new List<entityA>();
            for (int i = 0; i < 100; i++)
            {

                source.Add(new entityA
                {

                    name = “悟空” + i,
                    sex = i % 2 == 0 ? “男” : “女”,
                    age = i
                });
            }
            startTime = System.DateTime.Now;
            loop1(source);
            resultTime = System.DateTime.Now – startTime;
            Console.WriteLine(“一般for循环耗时:” + resultTime);
            startTime = System.DateTime.Now;
            loop2(source);
            resultTime = System.DateTime.Now – startTime;
            Console.WriteLine(“一般foreach循环耗时:” + resultTime);
            startTime = System.DateTime.Now;
            loop3(source);
            resultTime = System.DateTime.Now – startTime;
            Console.WriteLine(“并行for循环耗时:” + resultTime.Milliseconds);
            startTime = System.DateTime.Now;
            loop4(source);
            resultTime = System.DateTime.Now – startTime;
            Console.WriteLine(“并行foreach循环耗时:” + resultTime.Milliseconds);
            Console.ReadLine();
        }

//普通的for循环
        static void loop1(List<entityA> source)
        {

            int count = source.Count();
            for (int i = 0; i < count; i++)
            {

                System.Threading.Thread.Sleep(100);
            }
        }

//普通的foreach循环
        static void loop2(List<entityA> source)
        {

            foreach (entityA item in source)
            {

                System.Threading.Thread.Sleep(100);
            }
        }

//并行的for循环
        static void loop3(List<entityA> source)
        {

            int count = source.Count();
            Parallel.For(0, count, item =>
            {

                System.Threading.Thread.Sleep(100);
            });
        }

//并行的foreach循环
        static void loop4(List<entityA> source)
        {

            Parallel.ForEach(source, item =>
            {

                System.Threading.Thread.Sleep(100);
            });
        }
    }

//简单的实体
    class entityA
    {

        public string name { set; get; }
        public string sex { set; get; }
        public int age { set; get; }
    }
}
————————————————
版权声明:本文为CSDN博主「keyrainie」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/keyrainie/article/details/7679971

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161785.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 简单探讨spring整合mybatis时sqlSession不需要释放关闭的问题

    简单探讨spring整合mybatis时sqlSession不需要释放关闭的问题近期,在使用spring和mybatis框架编写代码时,sqlSession不需要手动关闭这一点引起了我的兴趣。我们都知道,单独使用mybatis时,sqlSeesion使用完毕后是需要进行手动关闭的,但为什么在和spring整合后就不需要了呢?在查阅了资料后得知,这是使用了spring中的AOP面向切面编程和动态代理技术。但是我认为脱离代码谈技术就是耍流氓。因此,我对MyBatis-Spr…

  • DNS 负载均衡

    DNS 负载均衡DNS负载均衡技术的实现原理是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。 最早的负载均衡技术是通过DNS来实现的,在DNS中为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中一个地…

  • HttpCanary下载_简单自我介绍网页代码

    HttpCanary下载_简单自我介绍网页代码前言首先,我们无论学习哪个框架,都要带着问题,带着思考去学习思考1:HttpRunner是什么?思考2:HttpRunner的设计模式是什么?思考3:为什么我们要学习HttpRunner?他的

  • 淘宝十年历程随笔_七十年历程

    淘宝十年历程随笔_七十年历程初创1.淘宝PV页面访问量在十几亿到二十几亿,所以即使访问淘宝首页页面服务器也有成百上千台,这过程用到的负载均衡技术LVS(LinuxVirtualServer由淘宝章文嵩博士开发)2.

  • java jasypt_java – 使用jasypt加密解密「建议收藏」

    java jasypt_java – 使用jasypt加密解密「建议收藏」如何使用jasypt解密加密的密码.packagecom.uk.mysqlmaven.jsf.test;importorg.jasypt.util.password.StrongPasswordEncryptor;importorg.jasypt.util.text.StrongTextEncryptor;publicclassPasswordEncryptionDecryptionUs…

  • python构造方法的作用_python中类的作用

    python构造方法的作用_python中类的作用1.构造函数的作用构造函数主要用来在创建对象时完成对对象属性的一些初始化等操作,当创建对象时,对象会自动调用它的构造函数。一般来说,构造函数有以下三个方面的作用:■给创建的对象建立一个标识符;■为对象数据成员开辟内存空间;■完成对象数据成员的初始化。2.默认构造函数当用户没有显式的去定义构造函数时,编译器会为类生成一个默认的构造函数,称为”默认构造函数”,默认构造函数不能完成…

发表回复

您的电子邮箱地址不会被公开。

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