论坛首页 编程语言技术论坛

PFX开启并行计算的时代,Java 又落后了

浏览 2225 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-04-05  
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之上.
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,请注意我的双核系统负载的前后差异(该例子只是为了显示负载,并未为并行计算而设计)

  • 大小: 58.8 KB
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics