-->

并行扩展Java中的等效(Parallel Extensions Equivalent in Jav

2019-09-17 13:40发布

我使用.Net开发并行扩展了一些经验,但我一直在寻找做一些Java中的工作,将有利于从一个易于使用的并行库。 请问JVM提供任何类似的工具来并行的扩展?

Answer 1:

有一些有限的支持java.util.concurrent中由于Java 5包,但全力支持是Java 7的功能 。



Answer 2:

你应该熟悉的java.util.concurrent包。 它具有用于在其基础更高级别的库并行编程简单且坚固的原语。 这样的库的一个例子是功能性的Java ,它具有一个易于使用的模块,用于并行编程 。

例如,下面是一个使用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;


Answer 3:

你应该definetely试图借字Parralel扩展。 http://www.ateji.com/multicore/



Answer 4:

下面是该网站的JSR166工作组,是谁写的新并发类为Java 7。

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

有上市2包:jsr166y(新并发类为Java 7)和extra166y(即针对某种原因将不包括各种类别)。

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



文章来源: Parallel Extensions Equivalent in Java