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

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

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

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


相关推荐

  • 修改浏览器设置为cookie怎么弄_删除浏览器cookie

    修改浏览器设置为cookie怎么弄_删除浏览器cookie怎么设置cookie,怎么设置cookie以及删除cookie和cookie详解注意:expires使用GMT或UTC格式的时间,我这里没有指定路径(path)和域(domain),当没有指定路

    2022年8月4日
    4
  • Linux进程同步机制Futex「建议收藏」

    Linux进程同步机制Futex「建议收藏」引子在编译2.6内核的时候,你会在编译选项中看到[*]Enablefutexsupport这一项,上网查,有的资料会告诉你”不选这个内核不一定能正确的运行使用glibc的程序”,那futex是什么?和glibc又有什么关系呢?1.什么是FutexFutex是FastUserspacemuTexes的缩写,由HubertusFranke,MatthewKirk

    2022年9月2日
    8
  • 回文字符串判断python实现

    回文字符串判断python实现一:什么是回文字符串例如:abccba,qwerewq等,奇数偶数个都可以;二:实现方法1):使用切片defis_palindromic(num):str_len=len(num)index=str_len//2str1=num[:index]str2=num[index:][::-1]ifstr1==s…

    2022年5月3日
    71
  • 分子生物学数据库

    分子生物学数据库核酸研究(NAR)对所有的分子生物学数据库进行分类,见NARDatabaseSummaryPaperCategoryList,包括:NucleotideSequenceDatabases(核酸数据库)RNAsequencedatabases(RNA序列数据库)Proteinsequencedatabases(蛋白质序列数据库)StructureDatab…

    2022年7月11日
    18
  • python 之字符编码

    一了解字符编码的储备知识python解释器和文件本编辑的异同相同点:python解释器是解释执行文件内容的,因而python解释器具备读py文件的功能,这一点与文本编辑器一样不同点:文本编辑器

    2022年3月29日
    49
  • 银行的大数据应用

    银行的大数据应用这是系列文章之一。本系列梳理了国内外银行信息化历程,包含区块链、云计算、物联网、移动端、人工智能各方面的应用情况。一、大数据发展简介“大数据”一词据称最早于1980年出现在美国著名未来学家阿尔文·托夫勒所著的《第三次浪潮》一书中,他在书中将“大数据”称为“第三次浪潮的华彩乐章”。在笔者看来,大数据的应用效果主要取决于两部分,一是大数据的技术部分,二是对数据质量和价值有重要影响的数据治理…

    2022年5月29日
    60

发表回复

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

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