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

  • 2014-11-10
  • 本文字数:747 字

    阅读完需:约 2 分钟

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

XE7 并行编程库的核心是 task 和 future 。它们同时提供了接口( ITask IFuture )和类( TTask TFuture )供用户使用。这和.NET 的 Task 和 Task类是一样的。

当处理不连续的操作时,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 )关注我们,并与我们的编辑和其他读者朋友交流。