Net 4.0应用篇学习-TPL并行程序开发-例1方差计算

本文介绍了并行与并发的概念,多核处理器的优势,以及何时选择并行算法。通过一个计算100个数方差的例子,详细讲解了如何使用线程和TPL进行并行处理,强调了线程同步和资源管理的重要性,展示了TPL并行执行部分的源码。
摘要由CSDN通过智能技术生成

1.并行与并发

并行(Parallelism)与并发(Concurrent):
在这里插入图片描述
并行(左图):
在2个处理器上处理2个任务
并发(右图):
在同一个处理器上处理2个任务
在单核处理器中,操作系统微观上上线程分时使用CPU实现宏观上任务并行执行。

2.多核处理器和多处理器

核:微处理器中所有可用的功能单元的集合
多核处理器指CPU中有一个以上执行核,多处理器指多个CPU,对于软件开发者而言,这两者可以不做区分,因为它们都指计算机有多个可供差遣的CPU。

3.串行算法与并行算法

串行算法未必慢。
并行算法更复杂,需要考虑线程共享资源的分配和同步,调试更难。
当要处理的数据量大,数据处理任务繁重,并且任务本身可以分解为独立的子任务时,使用并行算法比较合适。

4.例子:计算数据的方差

问题背景:求100个数的方差
解决方案:将100个数分为4组,每个组的数据分别处理,可以采用使用线程的方式并行处理,或者采用TPL(任务并行库)的方式并行处理。下面是用前者:

 class ThreadArgu
    {
   
        public double average,sum;
        public int range, counter;
        public double[] Datalist;
        public CountdownEvent cde;
    }
    class Program
    {
   
        static void Main(string[] args)
        {
   
            int Datasize = 8;
            int process = 4;
            CountdownEvent cde = new CountdownEvent(process);//初始计数值10
            //随机生成50个数字,放入数组
            double[] Datalist=Generate(Datasize);
            double sum=0;           
            ThreadArgu threadargu = new ThreadArgu();
            threadargu.cde = cde;
            threadargu.Datalist = Datalist;
            threadargu.range = Datasize / process;
            //计算数组平均值
            for (int i = 0; i < Datasize; i++)
            {
   
                sum = sum + Datalist[i];
            }
            threadargu.average = sum / Datasize;
            threadargu.counter = 0;
            //四个线程并发计算
            for (int j = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值