Especificar un número de aplicaciones de hilos de trabajo

Estoy trabajando en una aplicación que hace algunos cálculos de números pesados. Está destinado a ejecutarse en una sola computadora. Recientemente, comenzamos a buscar en subprocesos múltiples para acelerar los cálculos. Algunos algoritmos pueden ejecutarse en paralelo sin mucho esfuerzo, y utilizo un grupo de subprocesos fijos para ejecutar cada una de las subtareas.

Lo que me preguntaba es: ¿cómo se especifica típicamente el número de subprocesos (el tamaño del grupo) para este tipo de algoritmos? Sospecho que esto generalmente se hace mediante el uso de un archivo de configuración o un parámetro de línea de comandos, pero no he visto ningún ejemplo como ese, por lo que me preguntaba si hay mejores formas.

Relacionado con esto: ¿Es incluso relevante especificar el número de hilos? Estaba pensando que establecer el tamaño de la agrupación en el número de núcleos asignables probablemente se ejecutará más rápido, pero ¿es la disputa por la potencia de procesamiento en el caso de sobreasignación incluso relevante para el rendimiento? Por ejemplo: ¿la configuración de 20 subprocesos máximos en una máquina de 4 núcleos será peor que la configuración de 4 subprocesos máximos?

Editar: la aplicación está destinada a la venta, por lo que no tengo idea de en qué computadoras se ejecutará. Estoy buscando pautas generales y mejores prácticas.

Respuesta 1

Una regla general es usar NUMBER_OF_CORES + 1hilos (ciertos sistemas de compilación paralelos lo usan): un hilo "de reserva" para trabajar durante la E / S de otro hilo. Para encontrar el número de núcleos, consulte esta pregunta SO.

Respuesta: 2

En mi aplicación, quiero monitorear todas las carpetas de tarjetas SD cuyo nombre contiene "descarga", sin importar en qué nivel se encuentren, si se agrega un nuevo archivo a estas carpetas, quiero darme cuenta. La carpeta tal vez en el ...

Me gustaría cambiar mi versión Ant para usar javaw.exe en lugar de java.exe. Logré hacerlo estableciendo la variable de entorno _JAVACMD. Sin embargo, cuando se invoca la tarea Java con fork = "true", java.exe es ...

Creé la siguiente expresión regular condicional que parece funcionar en http://gskinner.com/RegExr/ pero no se compila en Java. La expresión regular es la siguiente: X: (\ d +). Y: (\ d +) (? (? =: Heredar = (verdadero | falso))) ...

En mi aplicación Tomcat eventualmente obtengo errores de "Memoria insuficiente" y "No se puede asignar memoria". Supongo que no tiene nada que ver con el montón, ya que llena completamente la memoria del sistema y estoy ...