2009-07-03 7 views
3

J'ai une certaine expérience de l'utilisation d'extensions parallèles dans le développement .Net, mais je cherchais à faire un travail en Java qui bénéficierait d'une bibliothèque de parallélisme facile à utiliser. La JVM offre-t-elle des outils comparables aux extensions parallèles?Extensions parallèles Equivalent en Java

Répondre

3

Vous devriez vous familiariser avec le package java.util.concurrent. Il a des primitives simples et robustes pour la programmation parallèle sur lesquelles baser des bibliothèques de plus haut niveau. Un exemple d'une telle bibliothèque est Functional Java, qui a an easy-to-use module for parallel programming. Par exemple, voici l'exemple canonique de MapReduce écrit à l'aide de Java fonctionnel. Il compte le nombre de mots dans un ensemble de documents, en supposant des documents sont des flux de caractères:

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

Pour instancier ParModule, vous lui donnez une stratégie parallèle. Vous pouvez implémenter vos propres stratégies, ou en utiliser une qui est fournie. Voici une qui utilise une piscine fixe de 16 fils de discussion:

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

Vous avez besoin des pour l'exemple les importations suivantes ci-dessus:

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

Voici le site pour le groupe de travail JSR166, qui a écrit la nouvelle concurrence classes pour Java 7.

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

Il y a 2 paquets listés: jsr166y (les nouvelles classes de Java 7 pour accès concurrentiel) et extra166y (divers les cours qui pour une raison ou une autre ne seront pas inclus).

Une des classes dans extra166y, ParallelArray est très utile. Il parallélise automatiquement les recherches binaires, fusionner-sortes, etc.

2

vous devriez essayer définitivement extensions Ateji Parralel. http://www.ateji.com/multicore/

+1

Malheureusement, ils ont cessé leurs activités. La première conférence de http://yuiblog.com/crockford/ explique pourquoi. De plus, il n'y a pas de plugin IntelliJ pour cela. – mark