Estoy en el proceso de diseño de una aplicación guiada por Java que ejecuta una serie de tareas separadas, cada una dentro de su propia clase extendida SwingWorker. Este es el diseño normal que uso para ejecutar tareas en sus propios hilos y aún mantener el EDT libre para actualizar la GUI. Cada SwingWorker se inicia en su propio hilo utilizando un Executors.newCachedThreadPool.Java Swingworker y múltiples hilos
Sin embargo, dentro de una clase particular, hay una tarea que requiere un tiempo bastante largo de procesar. La tarea contiene un bucle for que realiza algunos cálculos hasta seis veces.
He tenido la idea de implementar cada uno de los seis cálculos dentro de su propio hilo para acelerar el tiempo de procesamiento, pero no estoy seguro de la mejor manera de implementar esto.
Es posible extender SwingWorker e implementar Runnable, y luego usar un método Run() vacío dentro del bucle for, iniciar un nuevo Thread cada vez, o usar un cachedThreadPool.
¿O es mejor que solo use la implementación estándar de Thread()?
Cualquier consejo o sugerencia sería apreciada.
Gracias de antemano
Josh
* "He tenido la idea de implementar cada uno de los seis cálculos dentro de su propio hilo para acelerar el tiempo de procesamiento" * [sic] ... Este tipo de cálculo en paralelo para acelerar una aplicación con CPU solo traiga una aceleración si la CPU en la que está ejecutando su aplicación tiene al menos 6 núcleos disponibles para su aplicación Java. Si solo tienes, digamos, dos núcleos, entonces generar 6 hilos en lugar de dos en realidad retrasará tu programa ... – TacticalCoder
¡Ah, sí, eso tiene perfecto sentido! Gracias. –
@ user988052 que no tiene ningún sentido. Si tiene x hilos, entonces no necesariamente necesita al menos x núcleos para que el programa se ejecute más rápido. Siempre que haya más de 1 CPU lógica disponible para la JVM, el sistema operativo intentará extender esos hilos entre esas CPU lógicas. Las CPU más lógicas - >> menos subprocesos por CPU - >> finalizan más rápido. Puede ser mucho más complicado que eso (cuando se trata de algunos bloqueos, por ejemplo), lo sé, pero generalmente funciona de esta manera. –