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

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

XE7并行编程库的核心是task和future 。它们同时提供了接口(ITask、IFuture)和类(TTask、TFuture)供用户使用。这和.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中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

你可能感兴趣的:(RAD Studio XE7提供了针对Object Pascal和C++的任务并行库)