zoukankan      html  css  js  c++  java
  • [转载]:Delphi xe7并行编程快速入门

    现在多数设备、计算机都有多个CPU单元,即使是手机也是多核的。但要在开发中使用多核的优势,却需要一些技巧,花费时间编写额外的代码。好了,现在可以使用Delphi做并行编程了。

    在Delphi、C++ Builder和RAD Studio XE7中,有一个简化并行运行任务的库,叫做并行编程库。

    并行编程库在System.Threading单元中,其中提供了很多有用的特性,可方便的应用在已有项目和新项目中。提供了大量便利的重载函数,可同时支持C++和Object Pascal。

    这些特性包括易用的针对循环的并行运算,以及对运行任务、join任务(等待其他线程完成)、等待一组任务等操作提供支持的大量高级特性。支持这些功能的是一个自我管理的线程池(基于CPU数量)。

    为了演示使用并行库的简易程度,我们写一个计算质数的范例。

    function IsPrime (N: Integer): Boolean;

    var

     Test: Integer;

    begin

     Result := True;

     for Test := 2 to N - 1 do

       if (N mod Test) = 0 then

       begin

         Result := False;

         break; {jump out of the for loop}

       end;

    end;

    获取从1到X的质数个数的典型算法是顺序的循环检查其中的每个数,将总数记录在一个变量中(这里是一个整数Tot)。

    const

     Max = 50000; // 50K

     

    for I := 1 to Max do

     begin

       if IsPrime (I) then

         Inc (Tot);

     end;

    使用新的并行库,可把for循环用类函数TParallel.For替代,并传递一个匿名方法。

    另外为避免多线程冲突,可以调用TInterlocked.Increment。

    TParallel.For(1, Max, procedure (I: Integer)

     begin

       if IsPrime (I) then

         TInterlocked.Increment (Tot);

     end);

    有哪些改进?

    使用System.Diagnostics单元的TStopWatch类可以方便的获取每种循环的运行时间。即使在2核虚拟机中运行,标准循环用时415ms,而并行只需192ms。在Mac上时间从382ms降到90ms。

    最让人喜爱的地方是,作为语言和框架的一部分,可非常容易的加入到现有代码中。

    在开发原生代码的时候可以利用多核设备(包括移动设备)的优势。然而,在移动设备上过多运行多线程会消耗更多电量。

    Samples

    其他并行编程库的范例可见Delphi和C++自带的Conways游戏范例:

    C:UsersPublicDocumentsEmbarcaderoStudio15.0SamplesObject PascalRTLParallel Library

    C:UsersPublicDocumentsEmbarcaderoStudio15.0SamplesCPPRTLParallel Library

    不知道你感觉怎么样,我已经使用并行库将我的旧程序提速了,编程快乐。

    转自:http://blog.csdn.net/henreash/article/details/41315183

  • 相关阅读:
    数据库访问性能优化--应用开发
    苹果终端wifi图标点亮慢和portal弹窗机制分析以及处理办法和建议
    蓝牙固件升级(OTA升级)原理设计
    C语言:内存字节对齐详解
    linux du与ls查看文件大小时的区别
    80211 组播速率及组播转单播
    视频帧、码流计算
    IEEE802.11数据帧在Linux上的抓取 80211格式转8023帧格式
    wifidog源码分析
    无线路由:关于WDS,Repeater等模式的说明
  • 原文地址:https://www.cnblogs.com/China3S/p/4320970.html
Copyright © 2011-2022 走看看