320 likes | 489 Views
INFORMATICA III. ESCUELA DE INGENIERIA ELECTRONICA. DEPARTAMENTO DE SISTEMAS E INFORMATICA. CONCURRENCIA THREADS CONCEPTOS BÁSICOS SINCRONIZACIÓN PRIORIZACIÓN GRUPOS DE THREADS. Concurrencia. En el mundo real pasan muchas cosas a la vez
E N D
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA
CONCURRENCIA • THREADS • CONCEPTOS BÁSICOS • SINCRONIZACIÓN • PRIORIZACIÓN • GRUPOS DE THREADS
Concurrencia • En el mundo real pasan muchas cosas a la vez • En la modelizacion de software también pueden ocurrir muchas cosas concurrentemente: • Con varias computadoras se pueden ejecutar múltiples programas • Con una sola computadora se pueden simular la ejecución paralela de varias actividades • múltiples hilos de ejecución comparten el uso de un procesador INFORMATICA III - 2003
THREAD / HILO Un thread Un thread es un flujo de control secuencial en un programa. Un programa INFORMATICA III - 2003
MULTIPLES THREADS dos threads Un programa INFORMATICA III - 2003
Concurrencia • Java soporta la ejecución paralela de varios threads (hilos) • múltiples threads ejecutándose en una máquina pueden compartir recursos (memoria) • múltiples threads ejecutándose en varias máquinas necesitan capacidades de comunicación INFORMATICA III - 2003
Manejo de la Concurrencia • Dos formas de implementación: • Ejecución de un hilo hasta que termine o se autobloquee (actividades de E/S) (deja el control) • Ejecución de un hilo hasta que termine, se autobloquee o le saquen el control (cantidad de tiempo)(es desalojado) INFORMATICA III - 2003
THREAD • Sirven para aislar tareas • Java.lang.Thread INFORMATICA III - 2003
Programación concurrente OO • La concurrencia es natural en OO • Ada y Simula 67 ya soportaban concurrencia • Java es único entre los lenguajes de propósitos generales que pone primitivas de concurrencia a disposición del programador INFORMATICA III - 2003
Aplicaciones concurrentes • Descargas de grandes archivos de la WWW • Construcción de interfases gráficas • Recolección de basura de Java (garbage colector) INFORMATICA III - 2003
Inicio de la ejecución de un hilo • Se invoca al método start. Este crea los recursos necesarios del sistema para ejecutar el thread, y llama al método run del thread. • El invocador se ejecuta en paralelo con el thread INFORMATICA III - 2003
nacido listo ejecución dormido en espera bloqueado suspendido muerto Estados de hilos: ciclo de vida Invocación de un método ejecutable Cumplio condición Completar E/S Asignar procesador Termina quantum parado Solicitud E/S Invocación de métodos Invocación de un método Expìra el tiempo INFORMATICA III - 2003
Sincronización • Pueden operar en forma independiente. Cada uno tiene todos los datos y métodos que necesita. • Comparten datos y deben considerar el estado y las actividades de otros threads. INFORMATICA III - 2003
PRODUCTOR - CONSUMIDOR • Problema tipo que ejemplifica la necesidad de sincronización INFORMATICA III - 2003
Sincronización Escenarios productor /consumidor • Un thread escribe datos en un archivo • Otro thread lee datos del archivo Comparten recursos debo sincronizarlos INFORMATICA III - 2003
Sincronización • Solo un thread por vez puede acceder a un objeto bloquea Thread Thread INFORMATICA III - 2003
Sincronización de hilos • Java usa monitores para la sincronización de hilos. • Todo objeto con métodos “synchronized” es un monitor. • El monitor sólo permite a un hilo por vez ejecutar un método “synchronized” sobre el objeto. INFORMATICA III - 2003
Métodos sincronizados • Los métodos que tengan que acceder al mismo objeto, se deben declarar “synchronized” para lograr el bloqueo. • La ejecución de dos métodos sincronizados es mutuamente excluyente. INFORMATICA III - 2003
Métodos sincronizados class Account { private double balance public Account ( double inicial) { balance=inicial; } public synchronized double getBalance{ return balance; } public synchronized void deposito (double amount) { balance += amount; }} INFORMATICA III - 2003
Métodos sincronizados Métodos sincronizados Instancia (bloquean objetos) Clase (bloquean clases) INFORMATICA III - 2003
Creacion de threads • Crear un thread • Configurarlo : nombre, prioridad,etc. • Ejecutarlo : • invocar el método start, • éste invoca al método run • cuando run devuelve el control el thread ha terminado. INFORMATICA III - 2003
Creacion de threads Un thread se puede crear: • extendiendo una clase de Thread • implementando la interface Runnable INFORMATICA III - 2003
Prioridades De Los threads • La prioridad de un thread lo afecta cuando se está ejecutando en relación a otros threads. • Ejecución de múltiples threads • scheduling • algoritmo de scheduling de prioridad fija INFORMATICA III - 2003
Prioridades de los Threads • Todo thread en Java tiene una prioridad en el intervalo : • Thread.MIN_PRIORITY (constante que vale 1) • Thread.MAX_PRIORITY (constante que vale 10) • Thread.NORM_PRIORITY (constante que vale 5) INFORMATICA III - 2003
Planificación de threads • Mantener un hilo de máxima prioridad ejecutándose en todo momento, de acuerdo a la forma en que maneje la concurrencia. • La aparición de hilos de alta prioridad puede posponer indefinidamente la ejecución de hilos de prioridades bajas INFORMATICA III - 2003
Planificación de threads • Un hilo puede llamar al método yield para dar oportunidad a otros hilos de su misma prioridad a ejecutarse, esto se usa siempre que el manejo de la concurrencia no este basada en quantum. INFORMATICA III - 2003
Planificación de threads • Un hilo se ejecuta hasta que ocurre alguna de las situaciones siguientes: • muere. • se bloquea para entrada/salida. • invoca a sleep. • invoca a yield. • es desalojado por un hilo de mayor prioridad. • hasta que expira su quantum. INFORMATICA III - 2003
Planificación de threads • Un hilo con prioridad más alta que el que se está ejecutando, puede desalojar a éste si: • si invoca a resume. • si se acaba el período de sleep. • si se completa la E/S por la cual se bloqueo. • si se invoca notify o notifyAll para un hilo que había invocado wait. INFORMATICA III - 2003
Sincronización de hilos Ejemplo: INFORMATICA III - 2003
Interface Runnable • Otra forma de crear un thread es implementando la interface runnable, que nos provee el metodo run, para implementarlo en el thread. INFORMATICA III - 2003
Interface Runnable Ejemplo: INFORMATICA III - 2003
Grupos de hilos • Permite identificar varios hilos como pertenecientes a un grupo de hilos. • La clase ThreadGroup contiene los métodos necesarios para crear y manipular grupos de hilos. • El grupo tiene un nombre único. • Los grupos se pueden tratar colectivamente. INFORMATICA III - 2003