/ / Java multithreading - 6 hilos o 30 hilos? [duplicado] - java, multithreading, threadpool

Multihilo de Java: ¿6 hilos o 30 hilos? [duplicado] - java, multihilo, subproceso

Estoy trabajando en una aplicación multiproceso que necesita realizar algún reconocimiento óptico de caracteres. El requisito de la aplicación es que debe funcionar realmente, muy rápido.

Al mismo tiempo, tengo que leer simultáneamente 6 palabras diferentes. Entonces, lo que estoy haciendo es comenzar con 6 hilos, un hilo dedicado a leer cada palabra.

Sin embargo, me pregunto si debo ir inclusoademás, y comienza un hilo para cada personaje dentro de una palabra. Así que, por ejemplo, si tengo 6 palabras y cada palabra tiene aproximadamente 5-6 caracteres, esto significaría 30-36 hilos (posiblemente hasta 50-70 hilos para palabras más largas).

Para procesar cada carácter individual, parece tomar entre 10 y 30 milisegundos, para un total de 200 a 300 milisegundos por palabra. (Necesito reducirlo a 100 milisegundos o menos por palabra).

¿Qué estrategia realmente me dará un mejor desempeño? ¿Un hilo por palabra o un hilo por personaje?

Respuestas

5 para la respuesta № 1

¿Qué estrategia realmente me dará un mejor desempeño? ¿Un hilo por palabra o un hilo por personaje?

La respuesta depende en gran medida de la arquitectura de su hardware y del procesamiento que se está realizando. Es su procesamiento completamente CPU enlazado o hay algún registro u otro IO? La mejor manera de responder esto es hacer ejecuciones de rendimiento probando diferentes configuraciones de subprocesos con varios intentos para ver cuál funciona mejor. Para obtener los resultados más precisos, sus ejecuciones de prueba deben durar más de un par de segundos para descartar JIT y otra inicialización de Java.

Pareja otros pensamientos:

  • Como lo mencionaron @Sotirios y otros, solo lanzar más subprocesos al problema puede hacer que se ejecute más lentamente debido a la sobrecarga de cambio de contexto.

  • Debes usar un ExecutorService conjunto de hilos para que no esté bifurcando y cosiendo hilos cada vez. El inicio / apagado del hilo no es un proceso insignificante.