Question

J'ai une certaine expérience en utilisant des extensions parallèles dans le développement .Net, mais je cherchais à faire un travail en Java qui bénéficierait d'un outil facile à utiliser la bibliothèque de parallélisme. Est-ce que la machine virtuelle Java offre des outils comparables à parallèles extensions?

Était-ce utile?

La solution

Il y a un soutien limité dans java.util.concurrent depuis java 5, mais pleins supports sont

Autres conseils

Vous devez vous familiariser avec le java.util.concurrent package . Il a des primitives simples et robustes pour la programmation parallèle à la base sur laquelle les bibliothèques de niveau supérieur. Un exemple d'une telle bibliothèque est Java fonctionnelle, qui a un module facile à utiliser de programmation parallèle.

Par exemple, voici l'exemple MapReduce canonique écrit en Java fonctionnelle. 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 mettre en œuvre vos propres stratégies, ou utiliser celui qui est fourni. 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 importations suivantes pour l'exemple 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;

vous devriez essayer les extensions ateji definetely PARALLÈLES. http://www.ateji.com/multicore/

Voici le site pour le groupe de travail JSR166, qui a écrit les nouvelles classes pour Java 7. accès concurrentiel

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 (différentes classes qui, pour une raison ou une autre ne sera pas inclus).

L'une des classes dans extra166y, est très utile ParallelArray. Il parallélise automatiquement des recherches binaires, fusion-types, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top