现在多数设备、计算机都有多个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并行编程快速入门相关推荐

  1. linux c 并行编程从入门到精通,VISUAL STUDIO 2010并行编程从入门到精通(微软技术丛书)...

    摘要: <微软技术丛书:Visual Studio2010并行编程从入门到精通>循序渐进,步骤式动手练习迅速帮助读者掌握并行编程的基础知识. <微软技术丛书:Visual Studi ...

  2. C++网络编程快速入门(四):EPOLL模型使用

    目录 基本使用方法 step1:创建epollfd step2:将fd绑定到epollfd step3:调用epoll_wait检测事件 epoll_wait与poll.select区别所在 水平触发 ...

  3. C++网络编程快速入门(二):Linux下使用select演示简单服务端程序

    目录 select参数解释 select使用规范 select使用缺点 基本流程 实例代码 通信效果演示 往期文章 select参数解释 extern int select (int __nfds, ...

  4. Java NIO 非阻塞网络编程快速入门

    NIO 非阻塞网络编程快速入门 案例: 编写一个 NIO 入门案例,实现服务器端和客户端之间的数据简单通讯(非阻塞) 目的:理解 NIO 非阻塞网络编程机制 import java.net.InetS ...

  5. 转载博客:generic netlink 编程快速入门

    https://segmentfault.com/a/1190000016220770 generic netlink 编程快速入门

  6. pdf python 3.7编程快速入门 潘中强_无python基础,这些书籍可以帮您快速入门。

    利用Python进行数据分析> 定 价:119 元 作者:韦斯·麦金尼(Wes McKinney)著;徐敬一译 ISBN:9787111603702 出 版 社:机械工业出版社 学习Python ...

  7. 【Socket网络编程进阶与实战】------ Socket网络编程快速入门

    前言 本篇博客主要是分享,socket网络编程进阶与实践☞socket网络编程快速入门 一.聊一聊Socket 学习目标与收获

  8. 怎么运行c语言程序,如何使用C语言进行编程操作,教程在这里,C语言编程快速入门...

    原标题:如何使用C语言进行编程操作,教程在这里,C语言编程快速入门 C语言编程初级学习 编程语言有很多种,我们今天就介绍一种很瘦大家喜欢的C语言.该语言在大学中也是一门较为重要的学科,更是计算机学科里 ...

  9. Windows游戏编程快速入门方法

    Windows游戏编程快速入门方法 Easideao(简单思路) 序言: 从2001年到2005年,在不知不觉中我已经渡过了4年的职业游戏开发生涯.在这4年里经常会有些网友向我询问编程的入门有没有捷径 ...

最新文章

  1. 10g 中RETENTION GUARANTEE 的作用
  2. wxWidgets:wxPowerEvent类用法
  3. java stringbuffer倒置_Java程序设计05——String和StringBuffer
  4. selenium 表单提交结果_了解 Selenium 定位方式
  5. 页面缓存,数据源缓存
  6. 计算机考研评分标准,考研的评分标准.doc
  7. 学习 openssl 证书命令
  8. 洛谷P1136 迎接仪式
  9. 将一副遥感影像裁剪为多幅图像
  10. 汇编语言程序设计-钱晓捷(第五版)第一章-汇编语言基础知识
  11. Python一个命令开启http下载服务器
  12. python股票量化交易从入门到实践df_Python股票量化交易从入门到实践/金融科技系列...
  13. 合唱队形——线性dp
  14. Mysql数据库用户密码暴力破解
  15. 东华大学2020考研计算机复试准备上机题解析答案_基础篇(1-29)
  16. 酷派删除android系统升级,酷派手机怎么升级系统 酷派系统升级操作方法
  17. 接口测试平台代码实现146: 平台主题-夏日清凉5
  18. 思科三层交换机配置DHCP中继
  19. 后台管理系统导出Excel表格的方法
  20. LINQ教程一:LINQ简介

热门文章

  1. 水资源税取水计量监管系统 取用水户水量在线监测平台 水资源远程实时监控管理系统
  2. 小程序到货服务通知_新品到货
  3. 写一个块设备驱动(6)
  4. MySQL计算时间差函数
  5. 正则表达式匹配也可以简单快速(下:实现部分)
  6. java计算机毕业设计五金机电市场批发零售管理信息系统源码+数据库+系统+lw文档+mybatis+运行部署
  7. 在vue中,使用xlsx配合FileSaver进行导出excel表格
  8. 网站制作完成后--如何用ttkefu成功接单制作网站实例
  9. 利用Messager信使服务在局域网内发信息
  10. 转发(forword)与重定向(redirect)的区别