PFX开启并行计算的时代
程序员文章站
2022-05-18 12:29:51
...
Microsoft的FX家族,除了WPF,WCF等等外,又添加新丁PFX,即Parallel Extensions发布. Parallel Extensions最初发布的时候叫做PLINQ或者Parallel LINQ。当时它是一个LINQ Provider,可以自动地将查询并行化。不过现在它的范围已经大大扩张了。
其中最重要的一个改变是不再局限于查询。因为开发团队认识到有些算法无法自然地用LINQ来表达,因此将会有一套强制式的数据并行API。
包括:在匿名函数里头的Parallel For语法。和Threading.Tasks命名空间。它为调度操作提供了一个高级的任务管理器。与现在的线程池不同,在这个管理器中任务可以和其他任务关联。因此取消一个任务就可以自动地取消该任务的全部子任务。
有些被强烈要求的特性还没出现在Parallel Extensions当中。Joe Duffy列出了其中的一些,包括可验证的线程安全(verifiable thread safety)以及自动化的并行性(automatic parallelism)。另一个考虑中的特性是使用图形处理器来完成通用的操作。
同样的功能要等待Java 7.0才可能具备,预计时间将是2009年.
一个简单的PLINQ Demo,运行在PLINQ CTP之上.
图片是一个普通的LINQ和PLINQ循环100000次后的情况,红色框里的是普通LINQ,蓝色框里是PLINQ,请注意我的双核系统负载的前后差异(该例子只是为了显示负载,并未为并行计算而设计)
其中最重要的一个改变是不再局限于查询。因为开发团队认识到有些算法无法自然地用LINQ来表达,因此将会有一套强制式的数据并行API。
包括:在匿名函数里头的Parallel For语法。和Threading.Tasks命名空间。它为调度操作提供了一个高级的任务管理器。与现在的线程池不同,在这个管理器中任务可以和其他任务关联。因此取消一个任务就可以自动地取消该任务的全部子任务。
有些被强烈要求的特性还没出现在Parallel Extensions当中。Joe Duffy列出了其中的一些,包括可验证的线程安全(verifiable thread safety)以及自动化的并行性(automatic parallelism)。另一个考虑中的特性是使用图形处理器来完成通用的操作。
同样的功能要等待Java 7.0才可能具备,预计时间将是2009年.
一个简单的PLINQ Demo,运行在PLINQ CTP之上.
using System; using System.Collections.Generic; using System.Linq; namespace PLinqDemo { class Program { static void Main(string[] args) { string[] words = new[] { "Hello", "World", "PLINQ", "IS", "NOT", "BAD", "!!" }; var lazyBeeQuery = from word in words.AsParallel() select word; lazyBeeQuery.ForAll<string>(word => { Console.WriteLine(word); }); } } }
图片是一个普通的LINQ和PLINQ循环100000次后的情况,红色框里的是普通LINQ,蓝色框里是PLINQ,请注意我的双核系统负载的前后差异(该例子只是为了显示负载,并未为并行计算而设计)
上一篇: 你是不是觉得刚才你没发挥好
下一篇: 豌豆尖的功效与作用,让你重新认识豌豆尖