BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

RAD Studio XE7提供了针对Object Pascal和C++的任务并行库

| 作者 Jonathan Allen 关注 529 他的粉丝 ,译者 陈俊宇 关注 0 他的粉丝 发布于 2014年11月11日. 估计阅读时间: 2 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

RAD Studio XE7的一个主要特性是其并行编程库Parallel Programming Library)。XE7为包括Windows、OS X、iOS和Android在内的多个平台提供了基于任务的并行处理能力。跟Mono不同的是,这组工具为所有的目标平台提供了完全的原生应用。

XE7并行编程库的核心是task和future 。它们同时提供了接口(ITaskIFuture)和类(TTaskTFuture)供用户使用。这和.NET的Task和Task<T>类是一样的。

当处理不连续的操作时,task和future通常是独立使用的。想并行处理一组操作,可以使用封装器 。比如, 如果想并行化一个for循环,可以使用下面这段代码来抽象任务逻辑:

TParallel.For(1, Max, procedure (I: Integer)
    begin
        if IsPrime (I) then
        TInterlocked.Increment (TotalPrimes);
    end);

对于那些不熟悉Object Pascal的人来说,这里的procedure关键字创建了一个匿名函数。这跟VB的Function关键字和C#的箭头语法的行为相似。

请注意TInterlocked.Increment类的用法。这是Windows平台的Interlocked.Increment对应的一个平台无关版本。没有它,TotalPrimes计数可能会由于资源竞争而导致错误。因此,虽然这个库简化了并行编程,但是开发人员仍然需要确保正确地使用它。

并行编程库的一个主要缺点不是代码本身,而是文档。在所提供的18个类和类型中,只有7个有文档,而文档也只是一行文字描述。虽然对免费或者开源的库来说,有时也是可以接受的,但是对于一个现代的商业产品,却是很少见的。

查看英文原文:A Task Parallel Library for Object Pascal and C++


感谢臧秀涛对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT