Foros del Web » Programación para mayores de 30 ;) » Java »

Hilos..¿cuando compensa usarlos?

Estas en el tema de Hilos..¿cuando compensa usarlos? en el foro de Java en Foros del Web. Hola! Tengo una duda, sobre la que tengo que basar un trabajo, a ver si alguno de ustedes puede aclararme algo. Es sobre el uso ...
  #1 (permalink)  
Antiguo 04/04/2007, 10:33
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 279
Antigüedad: 19 años, 8 meses
Puntos: 2
Exclamación Hilos..¿cuando compensa usarlos?

Hola! Tengo una duda, sobre la que tengo que basar un trabajo, a ver si alguno de ustedes puede aclararme algo.

Es sobre el uso de Hilos (Threads) en Java. Quiero hacer una comparativa sobre cuándo compensa utilizarlos y cuando no.
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.

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?

Gracias de antemano, estoy aprendiendo el tema y ando algo perdida.
  #2 (permalink)  
Antiguo 04/04/2007, 14:02
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 19 años
Puntos: 19
Re: Hilos..¿cuando compensa usarlos?

Por ejemplo, una barra de progreso es bastante usual implementarlo con un hilo, o un servidor escuchando por un puerto, también ...

Un ejemplo: http://club.idecnet.com/~ccastano/fe...105/221105.htm

salu2
  #3 (permalink)  
Antiguo 04/04/2007, 16:09
Avatar de Xinef  
Fecha de Ingreso: marzo-2007
Mensajes: 202
Antigüedad: 17 años, 9 meses
Puntos: 7
Re: Hilos..¿cuando compensa usarlos?

Cita:
Iniciado por CarlaMedina Ver Mensaje
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...
  #4 (permalink)  
Antiguo 04/04/2007, 17:22
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 279
Antigüedad: 19 años, 8 meses
Puntos: 2
Re: Hilos..¿cuando compensa usarlos?

Muchas gracias a los 2 por responderme.

Respecto a lo que me dices, dogduck, me parece un ejemplo demasiado complicado para lo que tengo que hacer. Me refería más a lo que me dices tu, Xinef.

Por lo tanto, en un ordenador normal, una CPU, los hilos no compensan, haciendo ejecuciones de código sencillo como las que yo dije (escribir por pantalla, leer un fichero, calculos matemáticos, etc). Entonces, ¿no hay ningún ejemplo de código que yo pueda crear para ver eficacia de hilos, en mi ordenador, usando win xp?

No entiendo a lo que te refieres con "código independiente del programa principal" (lo siento, es q estoy muy verde en esto :$ )
  #5 (permalink)  
Antiguo 05/04/2007, 04:42
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 2 meses
Puntos: 51
Re: Hilos..¿cuando compensa usarlos?

Los Threads tienen sentido cuando tienes que hacer cosas que dependen de distintos "recursos" que te hacen esperar y una tarea no hace falta que espere a otra.

Si tienes una sóla CPU, hacer Threads para tareas que compitan por la CPU es perder el tiempo, al igual que hacer Threads que compitan por leer el mismo archivo etc. Los Threads hay que usarlos, habitualmente, cuando tienes algo esperando por un recurso y hay otra tarea que podrías hacer mientras. Por ejemplo: Cuando te conectas por la red a algo, el tiempo que la tarea espera que le respondan no ocupa CPU, asi que podrías hacer otra cosa. Si te conectas a varios sitios de red distintos, puedes intentar conectarte a la vez mientras no satures la red, conectarte a la BDD y mientras esperas hacer otra cosa... etc.

Eso y las tareas asíncronas que hay que hacer cada cierto tiempo sin tener que llamarlas explicitamente desde el programa principal, como Threads que comprueban si ficheros de configuracion han cambiado, si las conexiones de BDD siguen abiertas...

Si quieres ver un ejemplo de eficacia, haz un codigo que se conecte a 5 URLs distintas una detras de la otra, despues haz uno que se conecte a través de Threads, un Thread por conexión, por ejemplo.

En mi opinión, no se puede hacer, o no es nada sencillo ni fiable, una regla general de cuando compensa usarlos y cuando no, hay demasiados factores a tener en cuenta y la definición de las tareas que si pueden o no, es muy vaga.

S!
  #6 (permalink)  
Antiguo 05/04/2007, 05:12
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 279
Antigüedad: 19 años, 8 meses
Puntos: 2
Re: Hilos..¿cuando compensa usarlos?

Cita:
Iniciado por GreenEyed Ver Mensaje
Si quieres ver un ejemplo de eficacia, haz un codigo que se conecte a 5 URLs distintas una detras de la otra, despues haz uno que se conecte a través de Threads, un Thread por conexión, por ejemplo.
Gracias GreenEyed por tu respuesta, y creo que ese ejemplo de eficacia podría servirme. ¿A que te refieres, a conectarse a una página web? Podría alguien explicarmelo un poquito mejor? Soy novata!

Mil gracias!!
  #7 (permalink)  
Antiguo 05/04/2007, 09:11
Avatar de Xinef  
Fecha de Ingreso: marzo-2007
Mensajes: 202
Antigüedad: 17 años, 9 meses
Puntos: 7
Re: Hilos..¿cuando compensa usarlos?

Cita:
Iniciado por CarlaMedina Ver Mensaje
No entiendo a lo que te refieres con "código independiente del programa principal" (lo siento, es q estoy muy verde en esto :$ )
Un programa (más o menos, podemos asociarlo a proceso) es una tarea de ejecución secuencial. Es decir, una serie de operaciones que se ejecutan una tras otra. Por medio puede haber saltos, iteraciones, desviaciones... pero siempre será una tarea secuencial. Lanzar un proceso independiente de esa "secuencia" es lo que llamas hilo.

Un ejemplo que se suele usar siempre para explicar esto es el de la madre que está comprando en el súper.

La madre irá comprando productos uno tras otro. Dependiendo de la pericia de la madre y de la situación de los productor, incluso parecerá que alguna vez compra dos productos a la vez pero es sólo ilusión (la multitarea de los sistemas mono-procesadores).

Ahora bien, imagina que va a comprar con un hijo. La madre, podrá decirle al hijo que coja otro número en la pescadería (además de el que ella tiene). Así tendrán más "tiempo" de proceso. En el caso que los dos pidan el mismo pez, habrá un problema... y uno de ellos tendrá que esperar.

Hasta ahora, hemos considerado que sólo podrán realizarse compras una vez cada paso de tiempo... para simular un monoprocesador.

Sin embargo, si se pudieran realizar más de una compra con cada paso de tiempo (multiprocesador) el hijo podría ir a comprar el pan mientras la madre está esperando el pescado.

Es posible que pienses que entonces en un sistema monoprocesador no tenga sentido la programación multihilos. Pero es que se asocia incorrectamente programación multihilo a velocidad de ejecución. Como ya has visto, es posible obtener un mayor rendimiento haciéndolo (forzando al micro (sistema operativo) a darme más tiempo de ejecución o haciendo uso de los dos (o más) micros), sin embargo la verdadera importancia de los hilos es que puedes tener un proceso que siga su ejecución normal, mientras cedes otra parte de código está realizando otras tareas.
  #8 (permalink)  
Antiguo 05/04/2007, 11:39
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 2 meses
Puntos: 51
Re: Hilos..¿cuando compensa usarlos?

Cita:
Iniciado por CarlaMedina Ver Mensaje
Gracias GreenEyed por tu respuesta, y creo que ese ejemplo de eficacia podría servirme. ¿A que te refieres, a conectarse a una página web? Podría alguien explicarmelo un poquito mejor? Soy novata!

Mil gracias!!
Aquí mismo tienes un ejemplo de como conectarte desde Java a una página web. Conectarte a 5-10 direcciones, para que te quede descarado el ejemplo, una detras de la otra te dara un tiempo X. Si montas un sistema de Threads para que cada Thread se conecte a 1 dirección y luego termine, verás que acabas mucho antes*.

http://java.sun.com/docs/books/tutor...ngWriting.html

*: Ojo que no es ciencia exacta y si justamente una petición se te queda pillada por retardo de la red... pues dará la impresión de que la teoría no funciona. Pero hay que pensar que en ese caso hubiera sido aun peor de uno en uno .
  #9 (permalink)  
Antiguo 05/04/2007, 13:02
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 279
Antigüedad: 19 años, 8 meses
Puntos: 2
Re: Hilos..¿cuando compensa usarlos?

Milmillones de gracias!

Me voy a poner con ello y ya os contaré
  #10 (permalink)  
Antiguo 08/04/2007, 17:00
 
Fecha de Ingreso: mayo-2005
Ubicación: España
Mensajes: 279
Antigüedad: 19 años, 8 meses
Puntos: 2
Re: Hilos..¿cuando compensa usarlos?

Bien, he probado el ejemplo e conectarse a la web, con 20 conexiones, primero una detrás de otra, luego hechas con un hilo por conexión.
Ahora me asalta la duda...¿por qué en éste caso compensa? ¿Éstas conexiones a URL no se hacen mediante CPU?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:12.