Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porTiago Aleixo Veiga Modificado hace 6 años
1
Introducción y Threads Programación Concurrente
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN Introducción y Threads PUEBLA, PUEBLA 2006 Programación Concurrente 20/09/2018 Intro Threads
2
Programación concurrente. Def.
Es el nombre dado a las técnicas de programación para expresar el paralelismo potencial y resolver los problemas de comunicación y sincronización. La programación concurrente es importante, por que provee un mecanismo abstracto en el cual se estudia el paralelismo sin preocuparse de los detalles de la implementación. (Ben-Ari, 1982) 20/09/2018 Intro Threads
3
Programación concurrente
Un programa secuencial tiene un solo Thread (Hilo) de control. A su ejecución se le llama un proceso. Un programa concurrente tiene múltiples threads de control. Éstos pueden ser ejecutados como procesos paralelos. 20/09/2018 Intro Threads
4
Programación concurrente, secuencial y paralela.
20/09/2018 Intro Threads
5
Ejecución de un programa concurrente
Un programa concurrente se puede ejecutar mediante: Multiprogramación: procesos que comparten uno o más procesadores. Multiprocesamiento: cada proceso se ejecuta en su propio procesador pero con memoria compartida. Procesamiento Distribuido : cada proceso se ejecuta en su propio procesador conectado a otros mediante una red de computadoras. 20/09/2018 Intro Threads
6
En todos los casos anteriores, los principios básicos de la programación concurrente son los mismos.
20/09/2018 Intro Threads
7
Los Sistemas Operativos generalmente proveen una abstracción lógica para el hardware fundamental, los programas concurrentes se basan en tales abstracciones. Así, en un nivel de programación, los programadores no distinguen entornos de hardware que contienen múltiples o un solo CPU, ellos escriben programas usando tales abstracciones lógicas como threads, procesos, recursos, etc. 20/09/2018 Intro Threads
8
20/09/2018 Intro Threads
9
¿Por qué necesitamos programas concurrente?
Mejorar la disponibilidad y eficiencia Modelar tareas, objetos autónomos, animación Paralelismo: múltiples procesadores, simultanear E/S Protección: aislar actividades en hilos de ejecución. Ejemplos: • Tareas con mucha E/S: acceso a sitios Web y bases de datos. • Interfaces gráficas de usuario: gestión de eventos • Demonios con múltiples peticiones de servicio simultáneo • Simulación 20/09/2018 Intro Threads
10
Las aplicaciones concurrentes introducen complejidad.
Seguridad: procesos concurrentes pueden causar conflictos con datos compartidos. Liveness: los procesos pueden morir de “inanición" si no se coordinan adecuadamente. No-determinismo: el mismo programa que se ejecuta dos veces puedes mostrar resultados diferentes. 20/09/2018 Intro Threads
11
Procesos y Threads Un proceso es un programa en ejecución. El sistema operativo asigna todos los recursos que necesitan tales procesos. Un thread es un Hilo de ejecución dentro de un proceso. Eso significa que un proceso puede tener varios threads ejecutándose en el ámbito de un proceso particular. 20/09/2018 Intro Threads
12
Mientras un thread tiene acceso al espacio de direcciones de memoria y recursos de su proceso, un proceso no puede acceder a variables asignadas a otros procesos. 20/09/2018 Intro Threads
13
Conclusiones de la propiedad anterior
La comunicación entre threads creados dentro de un solo proceso es simple debido a que los threads comparten todas las variables. Así, un valor producido por un thread está inmediatamente disponible para todos los demás threads. Los threads toman memos tiempo para iniciar o detenerse debido a que usan el espacio de dirección ya asignada para el proceso corriente. 20/09/2018 Intro Threads
14
Planificación de CPU y Cambio de Contexto
Los procesos son ejecutados por el procesador a intervalos regulares (cuantum). Cada intercambio de CPU de un proceso a otro es llamado cambio de contexto. Los valores de los registros del CPU se salvan en la tabla de procesos del proceso que se estaba ejecutando cuando ocurre una interrupción. 20/09/2018 Intro Threads
15
Que es un Thread? Flujo de control diferente que puede ejecutar sus instrucciones de forma independiente. Concepto abstracto que se compone de todo lo que hace una computadora al ejecutar un programa tradicional Proceso VS Thread. Un Proceso es un código de programa en algún estado de ejecución, incluye: asignación de memoria virtual, descriptores de ficheros, ID de usuario, etc. Un Thread es una entidad ligera que tiene su propio contador de programa, otros valores de registros de CPU, tiempo de ejecución. 20/09/2018 Intro Threads
16
Estados de Hilos o Threads
Cuando nace el hilo espera hasta que se invoque el método start() del hilo. El hilo listo de más alta prioridad pasa al estado de ejecución. Un hilo pasa a su estado muerto cuando termina el método run() o cuando se invoca el método stop() Un hilo en ejecución pasa al estado bloqueado cuando el hilo emite una solicitud de E/S. Un hilo bloqueado no puede usar el procesador aunque este desocupado. 20/09/2018 Intro Threads
17
Ciclo de vida o estado de un Thread
20/09/2018 Intro Threads
18
Métodos de la clase Thread
La clase principal ejecuta el método start() de ese hilo. Start invoca el método run() Start lanza una excepción de un hilo ilegal (IllegalThreadStateException). Si el hilo que trata de echar de andar ya esta corriendo Static sleep. Se invoca con un argumento de tiempo para que duerma Static Interrupt. Devuelve true si el hilo ha sido interrumpido. Suspend. Suspende la ejecución del hilo y resume reanuda la ejecución del hilo 20/09/2018 Intro Threads
19
Yield. Ceder el paso dependiendo de las prioridades.
Stop. Detiene el hilo. isAlive. Devuelve true si se ha invocado start para un hilo si todavía no se ha invocado stop. Yield. Ceder el paso dependiendo de las prioridades. setName. Establece el nombre del Thread. Static currentThread. Referencia al hilo actual 20/09/2018 Intro Threads
20
Prioridad y planificación de hilos
Todo hilo tiene una prioridad en el intervalo de Thread.MIN_PRIORITY (vale 1), Thread.MAX_PRIORITY (vale 10) y Thread.NORM_PRIORITY(vale 5) Tajadas de tempo. Cada hilo recibe un lapso de tiempo de procesador llamado cuanto. El procesador le quita el tiempo al expirar este hilo y continua con el siguiente. 20/09/2018 Intro Threads
21
Un proceso termina hasta que todos los hilos terminan su ejecución.
Se posterga si se crean mas hilos. setPriority. Modifica la prioridad del hilo El hilo puede llamar el método yield() para dar oportunidad de ejecutarse. 20/09/2018 Intro Threads
22
Métodos para crear Threads en Java
Existen 2 métodos para crear Threads 1er Método. Los Threads se implementan como objetos que contienen un método llamado run(). Class MyThread extends Thread{ publiC void run(){ { //Cuerpo de ejecución Thread} } //Fin de la clase thread 20/09/2018 Intro Threads
23
2do. Método. Utilizando la interfase Runnable
Class Mythread implements Runnable{ . . . public void run(){ // cuerpo de ejecución del thread } } //fin del clase 20/09/2018 Intro Threads
24
Ejemplo 1. Utilizando la clase Thread
Class MyThread extends Thread{ public void run(){ system.Out.println(“this thread is running”); } } class MyThreadEx1{ public static void main(String [] arg){ MyThread t = new MyThread(); t.start(); } 20/09/2018 Intro Threads
25
Ejemplo 2. Utilizando la interfase Runnable.
Class MyThread implements Runnable{ public void run(){ system.Out.println(“this thread is running”); } } class MyThreadEx2{ public static void main(String [] arg){ Thread t = new Thread(new MyThread()); t.start(); } 20/09/2018 Intro Threads
26
Manipulación de un Thread
El cuerpo del método run() viene a ser el cuerpo del programa. Decimos que es la rutina main a nivel de thread. Todo lo que queremos que realice el Thread debe estar dentro del método run(). Cuando finalice run(), finalizará también el thread que lo ejecutaba. 20/09/2018 Intro Threads
27
Otro ejemplo para afianzar.
Class Repeticion extends Thread{ Private int repeticiones; Private String mensaje; Repeticion(String msg, int n){ mensaje=msg; repeticiones=n;} Public void run(){ For(int i= 1; i<=repeticiones; i++) system.out.println(“mensaje+” “+i); } Public static void main(String [] arg){ Repeticion r1=new Repeticion(“Rojo”,5); Repeticion r2=new Repeticion(“Azul”,15); R1.start(); R2.start(); } 20/09/2018 Intro Threads
28
El último ejemplo, de verdad!
public class UnHilo extends Thread{ public UnHilo(String str){ super(str);} public void run(){ for(int i=0;i<10;i++){ System.out.println(i+” “+getName()); try{ sleep((long)(Math.random()*1000); }catch(InterruptedException e){} } System.out.println(“Listo! “+getName()); } } 20/09/2018 Intro Threads
29
Continuación. public class DosHilos {
public static void main(String [] args){ new UnHilo(“Me llamo thread 1”).start(); new UnHilo(“Yo soy el thread 2”).start(); } }//fin de DosHilos 20/09/2018 Intro Threads
30
¿Qué aprendieron? Qué imprime el siguiente programa con threads?
Evaluación! ¿Qué aprendieron? Qué imprime el siguiente programa con threads? 20/09/2018 Intro Threads
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.