Pregunta

Tengo cierta experiencia usando extensiones paralelas en el desarrollo .Net, pero yo estaba buscando en hacer algún trabajo en Java que se beneficiaría de una biblioteca fácil de utilizar paralelismo. ¿La JVM ofrece herramientas comparables a paralelo-extensiones?

¿Fue útil?

Solución

Hay una cierta ayuda limitada en java.util.concurrent paquete desde Java 5, pero completos soportes son java 7 función.

Otros consejos

Usted debe familiarizarse con el paquete java.util.concurrent . Tiene primitivas simples y robustos para la programación paralela en la que basar las bibliotecas de nivel superior. Un ejemplo de tal biblioteca es Java funcional, que tiene un módulo fácil de usar para la programación paralela .

Por ejemplo, aquí está el ejemplo MapReduce canónica escrita usando Java funcional. Se cuenta el número de palabras en un conjunto de documentos, suponiendo que los documentos son corrientes de caracteres:

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

Para crear una instancia ParModule, se le da una estrategia paralela. Se puede implementar sus propias estrategias, o utilizar uno que se suministra. Aquí hay una que utiliza un conjunto fijo de 16 hilos:

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

Se necesitan las siguientes importaciones para el ejemplo anterior:

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;

debe intentar definitivamente extensiones Ateji parralel. http://www.ateji.com/multicore/

Este es el sitio para el grupo de trabajo JSR166, que escribió las nuevas clases de concurrencia para Java 7.

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

Hay 2 paquetes de la lista: jsr166y (las nuevas clases de concurrencia para Java 7) y extra166y (varias clases que por una razón u otra, no serán incluidos).

Una de las clases en extra166y, ParallelArray es muy útil. Se paraleliza automáticamente búsquedas binarias, Merge-tipo, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top