thread termino saber resueltos programacion multitarea multihilos hilos fuente ejemplos como codigo clase java ant parallel-builds

termino - Usando múltiples núcleos/procesadores al compilar Java



multihilos java (5)

Uso un escritorio con ocho núcleos para construir una aplicación Java usando Ant (a través de un objetivo javac). ¿Hay una manera de acelerar la compilación utilizando más de un hilo o proceso?

Sé que puedo ejecutar varias tareas Ant en paralelo, pero no creo que esto pueda aplicarse a un solo objetivo de compilación, ¿o no?



No tan lejos como sé. El compilador de Eclipse ha realizado algunos trabajos para acelerar el uso de múltiples núcleos, pero no compra tanto como probablemente desearía.

La pregunta es, ¿puedes vivir con una compilación incremental para el desarrollo, y solo recompilar aquellos que cambiaron? La reconstrucción completa se puede dejar al servidor de compilación.


Puede usar Buck Build para aumentar la velocidad de construcción y utilizar múltiples núcleos.

En una palabra:

Buck es un sistema de compilación desarrollado y utilizado por Facebook. Fomenta la creación de módulos pequeños y reutilizables que consisten en código y recursos, y admite una variedad de idiomas en muchas plataformas.

Buck construye artefactos independientes en paralelo para aprovechar los múltiples núcleos de su máquina. Además, reduce los tiempos de construcción incrementales al realizar un seguimiento de los módulos sin cambios para que se reconstruya el conjunto mínimo de módulos.


La documentación parece indicar que es poco probable que funcione correctamente con javac .

Cualquiera que intente ejecutar grandes secuencias de tareas Ant en paralelo, como javadoc y javac al mismo tiempo, está asumiendo implícitamente la tarea de identificar y corregir todos los errores de concurrencia de las tareas que ejecutan.

En consecuencia, si bien esta tarea tiene usos, debe considerarse una tarea avanzada que se debe usar en ciertas situaciones de procesamiento por lotes o de prueba, en lugar de ser un truco fácil para acelerar los tiempos de compilación en una CPU multipista.


Mientras el javac al que está llamando no utilice todos los núcleos, en realidad no importa lo que diga en Ant. Puede usar el atributo compiler para definir qué compilador java se debe usar para la tarea.

Si tiene varios objetivos de compilación, puede usar fork=yes para ejecutar el (los) objetivo (s) externamente.

http://ant.apache.org/manual/Tasks/javac.html#compilervalues