2009-07-03 16 views
3

Ich habe etwas Erfahrung mit parallelen Erweiterungen in. NET-Entwicklung, aber ich habe versucht, einige Arbeit in Java, die von einer einfach zu bedienenden Parallelitätsbibliothek profitieren würde. Bietet die JVM vergleichbare Tools für Parallel-Erweiterungen?Parallele Erweiterungen in Java äquivalent

Antwort

3

Sie sollten sich mit dem Paket java.util.concurrent vertraut machen. Es hat einfache und robuste Primitive für die parallele Programmierung, auf denen Bibliotheken auf höherer Ebene basieren. Ein Beispiel für eine solche Bibliothek ist Functional Java, die an easy-to-use module for parallel programming hat.

Hier ist zum Beispiel das kanonische MapReduce-Beispiel, das mit Functional Java geschrieben wurde. Es zählt die Anzahl der Wörter in einem Satz von Dokumenten, unter der Annahme, Dokumente Streams von Zeichen sind:

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(); } 

Um ParModule zu instanziiert, können Sie es eine parallele Strategie geben. Sie können Ihre eigenen Strategien implementieren oder eine davon verwenden. Hier ist eine, die einen festen Pool von 16 Threads verwendet:

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

Sie müssen die folgenden Einfuhren für das obige Beispiel:

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; 
1

Hier ist der Standort für die JSR166-Arbeitsgruppe, der die neue Concurrency schrieb Klassen für Java 7.

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

Es gibt zwei Pakete aufgelistet: jsr166y (die neuen Concurrency Klassen für Java 7) und extra166y (verschiedene Klassen, die aus dem einen oder anderen Grund nicht berücksichtigt werden).

Eine der Klassen in extra166y, ParallelArray ist sehr nützlich. Es parallelisiert automatisch binäre Suchen, merge-sort, etc.

2

sollten Sie definitiv Ateji Parralel Erweiterungen versuchen. http://www.ateji.com/multicore/

+1

Leider gingen sie aus dem Geschäft. Der erste Vortrag von http://yuiblog.com/crockford/ erklärt warum. Darüber hinaus gibt es kein IntelliJ-Plugin dafür. – mark