Pregunta

¿Hay alguna biblioteca como Intel TBB en Java que apoyan el paralelismo.

¿Fue útil?

Solución

Tal vez podría aclarar qué es exactamente lo que busca

  

Intel® Threading Building Blocks (Intel TBB) ofrece un enfoque rica y completa a expresar paralelismo en un programa en C ++. Es una biblioteca que le ayuda a tomar ventaja de rendimiento de los procesadores de múltiples núcleos sin tener que ser un experto en el roscado. Intel TBB no es sólo una biblioteca de hilos de reemplazo. Representa un nivel más alto, el paralelismo basado en tareas que abstrae los detalles de plataformas y mecanismos de roscado para la escalabilidad y el rendimiento.

Esto es lo que las bibliotecas de concurrencia han hecho desde 1998 y se hizo parte de Java 5.0 en 2004.

EDIT: Digamos que usted quiere un grupo de subprocesos que puede utilizar todos los procesadores lógicos en el sistema

.
ExecutorService es = Executors.newFixedThreadPool(
      Runtime.getRuntime().availableProcessors);

// to add a number of tasks
for(int i=0; i<numberOfTasks; i++) {
   es.submit(new Callable<ResultType>() {
      public ResultType call() {
          return doWork(i);
      }
   }
}

Esto realiza voluntad DoWork en cada filete de rosca.

En cuanto a sus características se ven muy familiar.

Yo tenía un vistazo a algunas de las optimizaciones de bajo nivel como la asignación de hilo de la memoria consciente. En Java esto se llama TLAB (rosca tampones de asignación local) y es transparente. Sospecho que la mayoría de los desarrolladores de Java ni siquiera saben que existen.

Resultados y excepciones son capturados para que en un futuro objeto que se puede inspeccionar más tarde.

Puede tener "variables de condición", como CountdownLatch o CyclicBarrier

  

Un nuevo contenedor imitación C ++ 0x unordered_map y en base a una especificación conjunta implementada por tanto Intel (TBB 3.0) y Microsoft (Visual Studio 2010). Tiene tres ventajas sobre el concurrent_hash_map anterior:

  • Una interfaz muy parecido al C ++ 0x unordered_map
  • Se permite la inserción concurrente y transversal.
  • No bloqueo está expuesto por la interfaz. Una implementación puede utilizar bloqueos internos, pero el bloqueo nunca se expone de una manera que puede contribuir a un punto muerto. Se puede mantener bloqueos internos, pero nunca mientras llama código definido por el usuario.

ConcurrentHashMap de Java soporta las interfaces ConcurrentMap y Mapa, permite la introducción concurrente y transversal y no expone ningún bloqueo. ;). Es por lo menos 9 años de edad para que sepa que debe ser robusto y estable

Hay una PriorityQueue que se puede utilizar en la que el hilo de la piscina si lo desea.

Otros consejos

hay un libro bueno para este tema:

Java Concurrency in Practice

Java concurrencia en la práctica

Está disponible en el java.util.concurrent paquete, ya que Java5.

Esa edición incluyó una importante revisión del modelo de memoria de Java, para solidificar la base de la programación concurrente y solucionar problemas conocidos. En Java, la concurrencia se diseña en el lenguaje desde el principio, y no simplemente añadido más tarde en una biblioteca.

Tome un vistazo a akka que proporciona un marco de concurrencia utilizando Actores y memoria transaccional. Por supuesto, esto bloquea solo fomenta la creación, que todavía tienen que ser capaces de escribir algo de código concurrente, pero se hace un poco más fácil.

Salida del paquete java.util.concurrent. Tiene un montón de clases que son útiles para la programación paralela.

Por cierto, se debe considerar la aceptación de algunas respuestas. 15 preguntas sin respuestas aceptadas desanima a la gente de responder a sus preguntas.

Algunos de ustedes están preguntando sobre la diferencia entre la concurrencia y paralelismo. Concurency significa diferentes programas que simulan que funcionan al mismo tiempo y el programador decide quién es el que se está ejecutando. Paralelismo significa un programa dividido en tareas y aquellos tarea en ejecución al mismo tiempo en diferentes núcleos para resolver un problema. Cuando estas tareas comptete por recursos con otros programas (tenemos más tareas que los núcleos disponibles) entonces tenemos concurrencia y paralelismo al mismo tiempo. Las condiciones de carrera avoing es la parte menos difícil en el paralelismo, el gran problema es encontrar una buena manera de descomponer una tarea adecuada para obtener buenos resultados. Muy bien decompostion grano tiene inconvenientes (gastos de administración), pero el paralelismo de grano grueso (monotasking) tiene desventajas también (que no está utilizando toda la potencia de procesamiento disponible en el equipo). Usted tiene que encontrar el término medio, que implica hacer algunos problemas de optimización (matemáticas)

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