代码之家  ›  专栏  ›  技术社区  ›  pnewhook

Java中等价的并行扩展

  •  3
  • pnewhook  · 技术社区  · 17 年前

    我有一些在.Net开发中使用并行扩展的经验,但我正在考虑用Java做一些工作,这将得益于一个易于使用的并行库。JVM是否提供了类似于并行扩展的工具?

    4 回复  |  直到 17 年前
        1
  •  3
  •   Apocalisp    17 年前

    java.util.concurrent 包裹它具有用于并行编程的简单而健壮的原语,这些原语是更高级别库的基础。这种图书馆的一个例子是 Functional Java ,而 an easy-to-use module for parallel programming .

    例如,下面是使用Functional Java编写的规范MapReduce示例。它统计一组文档中的字数,假设文档是字符流:

    public static long countWords(final List<Stream<Character>> documents,
                                  final ParModule m)
    { return m.parFoldMap(documents,
                          new F<Stream<Character>, Long>()
                          { public Long f(final Stream<Character> document)
                            { return (long)fromStream(document).words().length(); }},
                          longAdditionMonoid)
              .claim(); }
    

    为了实例化ParModule,您给它一个并行策略。您可以实施自己的策略,或者使用提供的策略。下面是一个使用16个线程的固定池:

    ExecutorService pool = newFixedThreadPool(16);
    ParModule m = parModule(executorStrategy(pool));
    

    对于上面的示例,您需要以下导入:

    import fj.F;
    import fj.data.Stream;
    import fj.control.parallel.ParModule;
    import static fj.control.parallel.ParModule.parModule;
    import static fj.pre.Monoid.longAdditionMonoid;
    import static fj.data.LazyString.fromStream;     
    import static fj.control.parallel.Strategy.executorStrategy;
    import static java.util.concurrent.Executors.newFixedThreadPool;
    import java.util.concurrent.ExecutorService;
    
        2
  •  2
  •   J-16 SDiZ    17 年前

    java.util.concurrent 自Java5以来的软件包,但不提供完全支持 java 7 feature .

        3
  •  2
  •   Max    16 年前

    你应该试试Ateji Parralel扩展。 http://www.ateji.com/multicore/

        4
  •  1
  •   Chris B    17 年前

    这里是JSR166工作组的网站,该工作组为Java7编写了新的并发类。

    http://g.oswego.edu/dl/concurrency-interest/

    extra166y中的一个类, ParallelArray 这是非常有用的。它自动并行二进制搜索、合并排序等。

    推荐文章