elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  threads , duda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: threads , duda  (Leído 5,656 veces)
omar_cdg

Desconectado Desconectado

Mensajes: 47



Ver Perfil
threads , duda
« en: 28 Agosto 2015, 22:15 pm »

Hola amigos,  tengo una pequeña duda... a ver si alguien me puede ayudar.
Si tengo un programa que consta de dos clases.  Una es la GUI y otra la clase funcional a esa gui,  digamos. Que a su vez tiene una clase interna.
. Cómo tendria que hacer para colocar cada una de ellas en un hilo diferente.


En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: threads , duda
« Respuesta #1 en: 29 Agosto 2015, 06:55 am »

Lo que se ejecuta en hilos distintos no son las clases, son las funciones de esas clases. Es decir que todo el tiempo tu aplicación ejecutará las funciones de cualquier clase en un hilo principal que es con el que comienzas. Cuando creas un nuevo hilo lo haces apuntando el hilo a una función y después ejecutas éste.

Quizá estés un poco confundido sobre la programación multihebra y su verdadero uso. Así que te recomiendo dar un repaso al concepto de programación multihebra primero.

También, dinos qué necesitas ejecutar en otro hilo y por qué necesitas ejecutarlo en otro hilo. Esto último es necesario siempre que programamos aplicaciones multihebra.


En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
omar_cdg

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Re: threads , duda
« Respuesta #2 en: 1 Septiembre 2015, 05:15 am »

Hola, gracias por responder. Tengo algunas aplicaciones que las he creado de la siguiente manera:
una clase para lo que es la interface grafica del programa y otra para la parte funcional del mismo.
 Por ejemplo una de mis aplicaciones es un programa que muestra tarjetas de juegos de azar(prode loto quini etc, segun se elija). Pues bien la clase principal de, por ejemplo, prode es la gui donde solo armo la tarjeta
en otra clase hago toda la parte funcional (resultado de partidos, dobles).
He leido en mis libros sobre los threads y he entendido que mejoran mucho el rendimiento de un programa, ya que se ejecutan independientemente. Pues entonces queria saber como puedo yo aplicar esos hilos en mis apps. Y sí, estoy confundido al respecto. Gracias
En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: threads , duda
« Respuesta #3 en: 1 Septiembre 2015, 06:41 am »

En efecto, lo que dice tu libro acerca de los hilos o threads es cierto, estos potencian mucho las aplicaciones, especialmente en procesadores multinucleo. Pero, los hilos unicamente son útiles en dos escenarios (creo, que alguien más me corrija si me equivoco) cuando tenemos un procesador con más de un núcleo y nuestro algoritmo puede hacer uso de todos los núcleos a la vez; y cuando debemos ejecutar una tarea en segundo plano por un tiempo prolongado y al mismo tiempo debemos ejecutar otras tareas por otro tiempo indefinido (tal es el caso de la GUI).

Los hilos funcionan de la siguiente manera:

-->Tienes un hilo principal
-->Creas un nuevo hilo con la dirección del código que ejecutará tu nuevo hilo (es decir, el método o función)
-->Lanzas el nuevo hilo.

A partir de este punto tu aplicación ya está corriendo dos hilos simultaneamente, es decir que ambas piezas de código se están ejecutando y tu segundo hilo terminará cuando llegue al final de tu función. Los hilos por lo general se usan, como te he dicho cuando tienes un código que demora mucho en ejecutarse y aún quieras que el usuario pueda emitir comando a la aplicación (un ejemplo de esto sería terminar la operación, como cuando presionas el botón de cancelar).

Debes tener en cuenta que los hilos no tienen un valor de retorno en el sentido tradicional de la palabra, pues al momento de que tú lanzar el hilo el flujo normal de tu programa seguirá sin esperar a que termina la función que estás ejecutando en el otro hilo que acabas de lanzar.

Te dejo el siguiente video que subí hace tiempo acerca de creación de hilos en C# y otro video de un caso práctico de uso en una aplicación:

https://youtu.be/GgyVTzXH804
https://youtu.be/vsd4SkAA8e4

Y uno más de multithreading en java

https://www.youtube.com/watch?v=ZxzCI3PAZwo

Por desgracia no encontré ningún video sobre los conceptos de la programación multihebra. Espero hacer uno pronto y subirlo.
En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
omar_cdg

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Re: threads , duda
« Respuesta #4 en: 1 Septiembre 2015, 18:37 pm »

Muchas gracias por tu tiempo y material, será apreciado. Saludos
En línea

Ur1cchio

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: threads , duda
« Respuesta #5 en: 7 Septiembre 2015, 04:06 am »

Voy a corregir algo, tenia entendido que los threads no aprovechan el multiprocesamiento, no es posible hacer que dos hilos o mas, pertenecientes a un mismo proceso corran en núcleos o procesadores diferentes, es mas, los hilos para el sistema operativo son transparentes, y el único que se encarga de planificarlos es el mismo proceso en el cual están ejecutando. El uso de threads no mejoran la performance de la aplicación, y a veces suelen causar problemas

Saludos
En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: threads , duda
« Respuesta #6 en: 7 Septiembre 2015, 06:57 am »

Lo que mencionas es falso, una aplicación puede ejecutar dos hilos (pertenecientes al mismo proceso) en núcleos diferentes. E incluso puedes hacer las pruebas ejecutando un bucle que realice un trabajo intensivo; si tu PC tiene dos núcleos y ejecutas la función en un sólo hilo obtendrás una carga del procesador del 50% en el administrador de tareas y si ejecutas esa misma función en dos o más hilos obtendrás una carga del 100%.

Quizá lo que quisiste decir es que un mismo hilo sólo puede ejecutarse en un núcleo.
En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
Ur1cchio

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: threads , duda
« Respuesta #7 en: 7 Septiembre 2015, 15:32 pm »

La verdad si te digo te miento, yo solo opino lo que estoy aprendiendo este cuatrimestre en la Universidad... Probablemente este entendiendo mal, o me este expresando mal. Pero aun asi, el único ente que se encarga de planificar en que momento que proceso va a usar un núcleo o procesador como quieran llamarlo es el sistema operativo. Es posible que un proceso en un cierto tiempo este " usando " dos núcleos aun así los hilos de un proceso comparten los mismos recursos y el mismo mapa de direcciones. A no ser que sean super independientes es muy poco probable que corran realmente en paralelo( solo es una suposición en base al conocimiento que tengo ).

Insisto, no lo se realmente. Y no estoy discutiendo, si alguien puede aportar con alguna bibliográfia seria genial.

Saludos!
En línea

El Benjo


Desconectado Desconectado

Mensajes: 392



Ver Perfil WWW
Re: threads , duda
« Respuesta #8 en: 7 Septiembre 2015, 20:53 pm »

Bueno, te voy a plantear la prueba que hice una vez y los resultados que obtuve y de ahí deduces lo que quieras.

Creé una función dentro de mi aplicación que hacía 1,000 millones de sumas.
Primero lancé esa función en mi hilo principal y obtuve 2.4 segundos en tiempo de ejecución.
Después lancé esa función en un segundo hilo y la ejecuté al mismo tiempo dentro de mi hilo principal (o sea el doble de operaciones de suma) y el resultado en tiempo de ejecución fue de 2.7 segundos.

Como vez, el tiempo es casi el mismo usando dos hilos (pues mi procesador tiene dos núcleos) la diferencia es que hice el doble de operaciones por segundo.

Lo que mencionas sobre los recursos y el hecho de que el sistema operativo sea el que asigna un tiempo a cada hilo es irrelevante, pues al haber más de un núcleo siempre va estar un hilo en cada uno de los núcleos.

Ponte a pensar que si lo que dijeras es cierto, el haber inventado los procesadores con más de un núcleo no serviría de nada. Saludos y espero que los números hayan hablado. De todas formas si no me crees, has la prueba por ti mismo.

EDITADO:

https://es.wikipedia.org/wiki/Hilo_de_ejecuci%C3%B3n

En el enlace anterior ve a donde dice "Hilos a nivel de núcleo (KLT)"

Aquí también, al inicio, puedes leer acerca de como funciona el cambio de hilos y lo que mencionabas sobre los recursos, y de hecho, te dicen que esto es una ventaja.

"En muchos de los sistemas operativos que dan facilidades a los hilos, es más rápido cambiar de un hilo a otro dentro del mismo proceso, que cambiar de un proceso a otro. Este fenómeno se debe a que los hilos comparten datos y espacios de direcciones, mientras que los procesos, al ser independientes, no lo hacen."
« Última modificación: 7 Septiembre 2015, 21:03 pm por El Benjo » En línea

www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
omar_cdg

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Re: threads , duda
« Respuesta #9 en: 9 Septiembre 2015, 02:47 am »

Hola, tengo entendido que cada hilo corre en un nucleo diferente, es por eso que los procesadores modernos pueden correr los programas  de manera mas rapida eficiente si las apps cuentan con varios threads
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SOLUCIONADO] [Duda] De Threads, Swing, y Non Blocking Calls
Java
RyogiShiki 1 2,971 Último mensaje 15 Noviembre 2011, 14:56 pm
por RyogiShiki
Duda con pool de threads en java
Java
xoker 0 1,675 Último mensaje 11 Enero 2014, 20:50 pm
por xoker
Duda sobre threads (hilos) y semáforos (mutex)
Programación C/C++
IngenieroFrustrado 3 3,003 Último mensaje 25 Enero 2014, 11:17 am
por amchacon
Duda con threads o hilos
Java
.:UND3R:. 1 2,429 Último mensaje 14 Febrero 2014, 17:59 pm
por Gh057
Duda con threads « 1 2 3 »
Programación C/C++
patilanz 27 9,679 Último mensaje 19 Mayo 2014, 13:22 pm
por eferion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines