Delphi xe7并行编程快速入门
来源:互联网 发布:js酷炫特效 编辑:程序博客网 时间:2024/06/03 16:54
现在多数设备、计算机都有多个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:\Users\Public\Documents\Embarcadero\Studio\15.0\Samples\Object Pascal\RTL\Parallel Library
C:\Users\Public\Documents\Embarcadero\Studio\15.0\Samples\CPP\RTL\Parallel Library
不知道你感觉怎么样,我已经使用并行库将我的旧程序提速了,编程快乐。
- Delphi xe7并行编程快速入门
- Delphi xe7并行编程快速入门
- Delphi XE7 发布了
- Log4D for Delphi XE7
- Delphi XE7 安装
- CUDA并行编程入门
- 并行编程入门
- Delphi 快速入门
- DELPHI快速入门基础教程
- Delphi快速入门
- DELPHI XE7安装Unidac6.2.7
- DELPHI XE7安装AlphaControls10.22
- Delphi XE7的蓝牙 Bluetooth
- Delphi XE7中使用JSON
- Delphi XE7 64位汇编
- Delphi XE7的蓝牙 Bluetooth
- hadoop分布式并行编程入门
- 并行编程--MPI开发入门
- 如何安装PIL--*** TKINTER support not available---IOError: cannot identify image file
- 在iOS8系统下,UITabbar上的item自定义背景色和图片问题 (
- TreeSet排序
- IOS编程之相机和相册
- jsp页面的div层的弹出效果
- Delphi xe7并行编程快速入门
- 移位运算的算法
- 模板之Typelist的"增删改查"
- MySQL随堂笔记| 深度结合个人理解
- android scrollview嵌套scrollview,gridview,listview的方法和深层次原因
- VS2012不能创建数据库连接出现或者连接数据库时提示:未能加载文件或程序集“Microsoft.SqlServer.Management.Sdk.Sfc, Version=10.0.0.0, C
- hadoop 0.20.2 伪分布式安装和配置
- Android遍历Map的四种方法
- int byte drawable bitmap笔记(不改)