【问题标题】:Parallel Extensions Equivalent in JavaJava中等效的并行扩展
【发布时间】:2009-07-03 02:46:42
【问题描述】:

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

【问题讨论】:

    标签: java .net parallel-extensions


    【解决方案1】:

    您应该熟悉java.util.concurrent 包。它具有简单而健壮的并行编程原语,可以作为高级库的基础。这种库的一个例子是Functional Java,它有an easy-to-use module for parallel programming

    例如,这里是使用函数式 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】:

      自 java 5 以来,java.util.concurrent 包中的支持有限,但完全支持 java 7 feature

      【讨论】:

        【解决方案3】:

        您应该绝对尝试 Ateji Parralel 扩展。 http://www.ateji.com/multicore/

        【讨论】:

        • 不幸的是,他们倒闭了。 yuiblog.com/crockford 的第一堂课解释了原因。此外,它没有 IntelliJ 插件。
        【解决方案4】:

        这里是 JSR166 工作组的站点,他们为 Java 7 编写了新的并发类。

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

        列出了 2 个包:jsr166y(Java 7 的新并发类)和 extra166y(由于某种原因将不包括在内的各种类)。

        extra166y 中的一个类,ParallelArray 非常有用。它会自动并行化二分搜索、合并排序等。

        【讨论】:

          猜你喜欢
          • 2014-01-18
          • 2012-09-14
          • 1970-01-01
          • 1970-01-01
          • 2014-04-29
          • 1970-01-01
          • 2021-08-18
          • 2011-03-22
          • 2012-06-27
          相关资源
          最近更新 更多