APLICACIONES REALES DE LOS HILOS(THREAD)
Alguien me podria ayudar en decirme algunas de las aplicaciones reales de los hilos(threads) ,
- IRr3v3rsible's blog
- Inicie sesión o regístrese para enviar comentarios
Alguien me podria ayudar en decirme algunas de las aplicaciones reales de los hilos(threads) ,
Comentarios
Así de bote pronto se me
Así de bote pronto se me ocurren.
Un hilo puede hacer una busqueda larga en una base de datos o en el file system, mientras otro hilo dibuja la interfaz gráfica al usuario.
En un servidor web, un hilo puede atender las peticiones entrantes y crear un hilo por cada cliente que tenga que atender.
En una animación, puede haber varios hilos dibujando varias partes de la pantalla.
A ok!
Soy nuevo en el foro, entiendo mas o menos esa parte, mas sin embargo en aparatos electronicos ¿no podemos ver el uso de los hilos? ¿O no funcionan a traves de ellos?...de antemano grax!
Esos son cables... ¬¬ (
Esos son cables... ¬¬ ( mal chiste )
ehem... Dependiendo del aparato electrónico, los más simples pueden no usarlos para nada, incluso los no tan simples. Me parece que solamente algunos bastante más complejos ( como un telefono celular por ejemplo ) los podría usar, e incluso ahí, lo podrían hacer no con hilos, sino con subprocesos.
Lo de multihilos va más enfocado al software que al hardware ( y con ello a los aparatos electrónicos )
Espero que te aclare algo. :)
reales?
Los hilos son la manera en que un programa de software puede realizar varias tareas de manera simultánea o casi simultánea. Eso es para simular algo que en el mundo real ocurre de manera natural. Mientras yo escribo esto suceden miles de cosas en la ciudad.
Como dice Oscar, lo de los hilos es un concepto en software. No hay hilos por hardware; si tienes un CPU en una computadora, ese CPU puede realizar exactamente una tarea a la vez. Si tienes uno multicore pues puede realizar simultáneamente tantas tareas como cores tenga. Si tienes una compu muy avanzada con varios CPU multicore entonces puede realizar tantas tareas como cores tenga cada CPU. Pero los hilos es algo puramente de software, y los controla finalmente el sistema operativo que es el que decide cuáles de todos los hilos que hay, son los que van a usar los CPU's disponibles en un momento dado.
Aplicaciones reales con Hilos (Threads)
Para entender el procesamiento por hilos, lo primero que te sugiero es que revises el concepto de pila de ejecución (Stack), como sabes las aplicaciones de software son instrucciones interpretadas por el CPU y ejecutadas de manera secuencial por el mismo, dentro de lo que llamamos la pila, esas instrucciones son tomadas directamente de los métodos que codificaste en las clases y que son invocados en la aplicación.
Esto puede verse como si estuvieras en un banco donde hay un solo cajero atendiendo todas las transacciones, te puede imaginar la cantidad de tiempo que le tomaría si en ese banco llegaran mas de 100 personas, entonces que hacen?, normalmente en software se crea una ejecución concurrente (dar pequeños cantidad de tiempo para atender a más de uno a la ves) esto lo que hace es que se aparente que se haga en paralelo, supón que a cada cliente le dedican una fracción muy pequeña de tiempo (con un super cajero) , pero claro en esa fracción se realizan "n" tareas, entonces habrá mejor eficiencia en la atención, sin embargo cuando la carga de clientes es mayor, entonces no es suficiente y se recurre a poner mas super cajeros, gerentes y una que otra host (a veces le ponen una tele para persuadir el retraso - en las aplicaciones de software existe el famoso circulito que es completándose o algo que se mueva).
Así mismo para el las aplicaciones de software, en el caso de Java el manejo de hilos se traduce a la creación de varias pilas de ejecución (según sean el número de threads) los cuales tienen independencia uno de otro y que ello puede llevar a una ejecución en paralelo siempre y cuando tengas varios procesadores (sino solo esta trabajando en forma concurrente), de ahí que servidores sean multi-procesadores, tomando esta ventaja los servidores pueden atender millones de peticiones.
Aplicaciones Reales con Hilos, hay un sin numero de ellos, por ejemplo como crees que trabaja tu MP3, la ejecución de Voz por IP, reproducción de video, La aplicaciones bancarias, incluso no vayamos tan lejos, el refrigerador de tu casa, el radio, la televisión etc... mucho de ello trabaja con sistemas o sub-sistemas haciendo tareas en paralelo y coordinándose para proveer el servicio al usuario
cual es la parte interesante del manejo de hilos, bueno cuando tienes recursos compartidos tienes que implementar o utilizar los esquemas de bloqueo(Semaforos) y sincronización es ahí donde esta el arte de programar con hilos ya que de no hacerlo bien puedes crear un sistema totalmente ineficiente o inútil, ejemplo aplicaciones que tardan horas en procesar los servicios o que se bloquean y que intercambian los datos equivocadamente.
Por ello hay que revisar bien los esquemas y que es lo que se quiere lograr, diseñar con grafos puede ayudarte a verificar las dependencias a recursos compartidos.
En el caso de las aplicaciones WEB, generalmente el uso de procesos en paralelo esta coordinado por los contenedores y los programadores ya no tienen que preocuparse mucho por dicha coordinación, excepto en casos muy especiales.
Que aplicación tienes en mente ?, es muy seguro que utiliza hilos para su solución.
Ejemplo
Checa este ejemplo Hilos
Entendido!
Gracias por sus respuestas fueron mis precisas cada una me hizo comprender parte de la importancia de los hilos....Mi problema ahora es este, tengo que crear un semaforo (Como los de las avenidas) usando hilos por medio de los componentes AWT de Java,(Un rectangulo y tres circulos) solo que no tengo idea de como "Conectar" los hilos con los componentes en este caso con los circulos para que vayan cambiando de color a un cierto tiempo, como se daran cuenta soy algo nuevo en programacion, si alguien me puede ayudar se lo agradeceria mucho!...
Semáforos de Avenida
Si solo es uno, creo que no necesitas threads, solo temporizadores(timers), en cazo que tengas un crucero y dependiendo el numero de semáforos entonces lo que puedes proponer es que cada semáforo sea manejado con un thread y temporizadores, coordinando entre ellos como van a sincronizarse para dar el paso a los vehículos, pueden aplicar algunas reglas de preferencia (impactando al temporizador), si es una avenida principal o tipo de cruce en el cual se ponga el semáforo.
Primero crea los escenarios que pretendes cubrir (análisis) y escribe los comportamientos, después pasas al diseño y codificación
saludos
Analisis resuelto
En cierta parte es algo sencillo, solo hay que representar una caja de un semaforo de avenidas, los comportamientos es lo que no tengo muy claro, eso es lo que me impide empezar a realizar mi codigo fuente, he realizado algunos programas con hilos mas sin embargo no relacionados con componentes(Circulos)...Alguna idea?
Foco de semáforo como Thread.
Piensa como funciona en la Realidad el Semáforo (más o menos simple)
considerando que el foco tiene un comportamiento independiente en función que se encuentre conectado.
Imaginando que el circulo es un foco, con un constructor para indicar el color, el método run sería cuando esta esta conectado a un socket, y tendría un interruptor para indicar si esta encendido o apagado . lo cual cambia el estado del foco.
Ahora bien si este foco va hacer parte de un semáforo (una caja con compartimientos y control de encendido y apagado)
El semáforo determinara cuando enciende y en que orden, en este se implementaría el algoritmo de control
entonces el foco se instala en el Semáforo y se activa la corriente. traduciendo a Java
Crea una clase llamada Foco que implemente Runnable, en el método run con un ciclo (sleep(16.6) aprox 60 hz) infinito determina que el foco esta activo para su uso, el método para encender y apagarlo
Crea la clase Semáforo y ahí arma la composición de los focos (colores y posición) y un método para indicar que el semáforo esta activo, hay un algoritmo que controla los tiempos de encendido y apagado en base a la secuencia que determines y número de focos a utilizar.
Es una de tantas soluciones.
espero te ayude con tu ejercicio
Ps a intentarlo...
Primero gracias por la explicacion, mas o menos entendi lo de crear las clases, mas sin en cambio mi problema radica en poner cada componente AWT con su respectivo hilo, cada circulo del semaforo que tenga su sincronizacion, mas que nada es un error se sintaxis, no se si me explique?
Muy simple.. Piensa que la
Muy simple..
Piensa que la Clase Foco es la codificación de un circulo en un Canvas (tu indica las dimensiones acorde a la caja del semáforo)
entonces , el cambas lo puedes colocar en otro contenedor, revisa el API
// parametros del estado del foco
// El constructor le mandas los parámetros para crear el foco (dimensiones del canvas y dibujo del circulo en el canvas)
public Foco( ){
}
public void isOff( boolean arg){
//sirve para indicar si apagas o prendes el foco
}
private void changeStatus(){
// prendes o apagas el foco, cambiar color del circulo ayudate de paint y repaint del canvas
// solo en que haya cambiado de estatus
// en lugar del sleep puedes manejar el wait y notify o el API de java.util.cuncurrent
// se me hace que es más eficiente
// donde cambiando de estado lo metes en espera
}
// hay un metodo repaint que utilizaras para camiar el color del circulo en base al estado apagado o encendido
public void run(){
wile(true){
Thread.sleep(16.3) // creo que pudiese aumentar un poco mas para evitar que el procesador se dispare
changeStatus()
}
}
}
class Semaforo{
public void init (){
Foco focoVerde = new Foco(....) // con los parametros para colocarlo al color deseado
Foco focoAmarillo = new Foco(....) // con los parametros para colocarlo al color deseado
Foco focoRojo = new Foco(....) // con los parametros para colocarlo al color deseado
// inicializa tu componente grafico JFrame o JPanel , dependiendo si es applet o no.
// Lo colocas cada camvas a un panel en el orden del semaforo
Thread th1 = new Tread(focoVerde); <-- aquí esta cada foco en su hilo
Thread th1 = new Tread(focoAmarillo); <-- aquí esta cada foco en su hilo
Thread th1 = new Tread(focoRojo); <-- aquí esta cada foco en su hilo
th1.run();
th2.run();
th3.run();
// desde cada Foco controlas el estado de encendido o apagado
// controla el temporizador para cambiarlos de color...
// enciende y apaga (desde aca puede utilizar el Notify, para sacar al thread que esta esperando)
}
}
por ahí va la idea ....
saludos
Ok!!
lo voy a intentar asi de esa forma se ve que esta sencillo, si me trabar de nuevo te puedo molestar? jeje...lo que pasa que es para una evaluacion que tengo que entregar antes de las 8 am, y como comprenderas estoy algo desesperado jeje...De antemano grax!
aplicaciones de los Hilos..
Hola!
Los THreads o Hilos sirven para crear "procesos light" que se ejecutan en pararlelo unos y otros
en una ventana el Hilo que monitorea los Clicks que disparan eventos no es el mismo que corre una animacion en la pantalla por ejemplo
si tu aplicacion es multi usuario (i.e. un desarrollo web) entonces los hilos son parte de esa aplicacion por default...
en Glassfish o Apache cada llamada a la pagina Web genera un nuevo Hilo (para que el usuario A no tenga que esperar al usuario B)
si ademas la aplicacion Web recibe datos de otro lado (ejemplo si es un sistema de localizacion vehicular por internet) entonmces los datos de los vehiculos se reciben en otro thread diferente al de el servidor Web.
si quieres que el usuario envioe datos a un vehiculo por ejemplo entonces tendras que ligar el Thread de la pagina Web con el Thread de comunicacion.