zoukankan      html  css  js  c++  java
  • .NET(C#) Internals: 以一个数组填充的例子初步了解.NET 4.0中的并行(一)

    引言

    随着CPU多核的普及,编程时充分利用这个特性越显重要。本文首先用传统的嵌套循环进行数组填充,然后用.NET 4.0中的System.Threading.Tasks提供的Parallel Class来并行地进行填充(当然这里也用到嵌套循环),通过对比发现其中差异。主要内容如下:

    • 通常的数组填充
    • 并行的组数填充
    • 性能比较
    • System.Threading.Tasks分析,这个将在续篇.NET(C#) Internals: 以一个数组填充的例子初步了解.NET 4.0中的并行(二)中介绍

    1、通常的数组填充

    首先看如下代码:

    通常的数组填充

    上面的粗体红色显示的几行代码就是实现数组填充,这个很好理解不用多费口舌。补充说明的是:上面的Utility是为了统计性能而编写的一个类,它主要就是用到了Stopwatch对象——它提供一组方法和属性,可用于准确地测量运行时间。Utility的代码如下:

    Utility类

    利用它我们就可以对数组填充所耗费的时间进行计算了。

    2、并行的组数填充

    为了充分利用CPU的多核,我们编写如下代码:

    并行的数组填充

    留意上面的红色粗体显示的几行代码,它利用了Parallel.For Method (Int32, Int32, Action<Int32>)方法,Parallel类位于命名空间System.Threading.Tasks中,它支持并行循环。此Parallel.For方法使得它里面的迭代可能并行地运行,注意到上述代码中它的第三个参数是一个委托。在(0,calcVal)之间,这个委托将被调用。

    3、性能比较

    现在我们来测试一下,上面两种方法的执行性能差异如何,下载源码。其实,核心代码已经在上面贴出来了,现在注意是编写实例来测试,代码主要如下:

    性能比较测试

    运行之后得到如下结果:(不同电脑配置不同,得出结果不同)

    image图1、性能比较

    从结果可以看出,并行的数组填充比通常的数组填充性能更高。

    • System.Threading.Tasks分析,这个将在续篇.NET(C#) Internals: 以一个数组填充的例子初步了解.NET 4.0中的并行(二)中介绍……
  • 相关阅读:
    python基础之元组、文件操作、编码、函数、变量
    python---基础之模块,列表,元组,字典
    python成长之路-----day1-----作业(登录程序和三级菜单)
    k8s的port、targetport、nodeport之间的区别
    查找并删除文件
    systemctl自定义service
    中标麒麟7.0源
    springboot问题,没有主清单属性
    iso搭建本地源
    添加路由
  • 原文地址:https://www.cnblogs.com/skynet/p/1732515.html
Copyright © 2011-2022 走看看