Cita:
Iniciado por CarlaMedina Es sobre el uso de Hilos (Threads) en Java. Quiero hacer una comparativa sobre cuándo compensa utilizarlos y cuando no.
Compensa usarlos cuando necesitas lanzar código independiente del programa principal.
Cita: Es decir, tengo una tarea (por ejemplo, una simple: sacar por pantalla 100000 veces "Hola, mundo!"). Si ejecuto éste código usando 1 hilo me lleva un tiempo t1, y si lo hago usando 2 hilos (con lo que cada hilo saca 50000 veces) me lleva t2. Lo que pasa es que t1 y t2 son tiempos muy iguales. También he probado a hacerlo dividiendo el trabajo entre 5 hilos, y lo mismo, no hay mejoría.
Tener procesos independientes en ejecución no quiere decir que se ejecute el resultado más "rápido".
Si al final de todo hay un sólo dispositivo, el tiempo será el mismo, puesto que para escribir en pantalla, tendrá que esperar un proceso a que el otro termine.
Si no hay problemas de accesos, debes tener en cuenta que en un sistema monoprocesador, la ejecución de hilos depende del sistema operativo, y será siempre en línea.
Donde si se podría hacer algun estudio de eficiencia, es en sistemas multiprocesadores. En ese caso un hilo podría estar siendo ejecutado por un procesador, mientras un hijo lanzado por este, estaría en ejecución en otro procesador. En ese caso, si habría un rendimiento mayor en un programa multihilo, que en uno monolítico.
Cita: Por lo tanto...¿Qué ejemplo de ejecución puedo poner, en el que compense dividir el trabajo entre hilos? es decir, hilos ¿cuándo compensan?
Ya te digo que no sólo depende de la "velocidad de ejecución". Cuando te interese tener código en ejecución independiente del código principal: hilos.
Si tu programa va a estar en un escenario multiprocesador: hilos.
Eso sí, el uso de hilos tiene un coste. Tienes que sopesar si te interesa asumir ese coste: gestión de hilos, blah blah...