Download Presentación de PowerPoint
Document related concepts
no text concepts found
Transcript
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA • CONCURRENCIA • CONCURRENCIA en JAVA • THREADS: – – – – CONCEPTOS BÁSICOS SINCRONIZACIÓN PRIORIZACIÓN GRUPOS DE THREADS • Java.util.concurrency Concurrencia Vida real Sucesos concurrentes Desarrollo de software Representar estos sucesos concurrentes Ing. E. D'Agostino INFORMATICA III - 2007 3 Concurrencia Programa con un único flujo de control Abandonar Debo poder desarrollar programas con múltiples flujo de control Ing. E. D'Agostino INFORMATICA III - 2007 4 Concurrencia Procesos Threads Recursos propios Existen dentro de un proceso Ing. E. D'Agostino INFORMATICA III - 2007 5 Thread principal Cada programa java tiene al menos un thread, el thread principal (main). Este puede ejecutar otros threads. Ing. E. D'Agostino INFORMATICA III - 2007 6 Concurrencia Programación concurrente Notaciones y técnicas para expresar la ejecución concurrente de procesos. Ing. E. D'Agostino INFORMATICA III - 2007 7 Concurrencia Programación concurrente Sistema operativo Lenguaje de programación Ing. E. D'Agostino INFORMATICA III - 2007 8 Concurrencia Máquinas con un núcleo de ejecución simple Time slicing Ing. E. D'Agostino Máquinas con más de un núcleo de ejecución simple o con varios procesadores Hace más eficiente ejecución concurrente procesos INFORMATICA III - 2007 la de 9 Concurrencia • Si no comparto recursos no tengo problemas. • Si comparto recursos debo tener una forma de que estos no caigan en inconsistencias y evitar el caso de que dos flujos quieran utilizar juntos el mismo recurso. Ing. E. D'Agostino INFORMATICA III - 2007 10 Concurrencia en Java Antes de la version JDK 1.5 Monitores Después de la version JDK 1.5 Semáforos Ing. E. D'Agostino INFORMATICA III - 2007 11 THREAD / HILO Un thread Un thread es un flujo de control secuencial en un programa. Un programa Ing. E. D'Agostino INFORMATICA III - 2007 12 MULTIPLES THREADS dos threads Un programa Ing. E. D'Agostino INFORMATICA III - 2007 13 Concurrencia Java soporta la ejecución paralela de varios threads (hilos) múltiples threads ejecutándose en una máquina pueden compartir recursos (ejemplo: memoria) múltiples threads ejecutándose en varias máquinas necesitan capacidades de comunicación Ing. E. D'Agostino INFORMATICA III - 2007 14 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 el SO le saque el control, puede que, antes que le saque el control, termine o se autobloquee. (cantidad de tiempo)(es desalojado) Ing. E. D'Agostino INFORMATICA III - 2007 15 Formas de crear threads 1. Instanciando un objeto runnable: public class HelloRunnable implements Runnable { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[]) { (new Thread(new HelloRunnable())).start(); } } Ing. E. D'Agostino INFORMATICA III - 2007 16 Formas de crear threads 2. Creando una clase extendida de thread: public class HelloThread extends Thread { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[]) { (new HelloThread()).start(); }} Ing. E. D'Agostino INFORMATICA III - 2007 17 Formas de crear threads ¿Porqué existirán dos formas? ¿Cual usar? ¿Porqué? Ing. E. D'Agostino INFORMATICA III - 2007 18 THREAD Java es único entre los lenguajes de propósitos generales que pone primitivas de concurrencia a disposición del programador Java.lang.Thread Ing. E. D'Agostino INFORMATICA III - 2007 19 Ejemplos de aplicaciones concurrentes Descargas de grandes archivos de la WWW Construcción de interfases gráficas Recolección de basura de Java (garbage colector) Ing. E. D'Agostino INFORMATICA III - 2007 20 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 Ing. E. D'Agostino INFORMATICA III - 2007 21 Estados de hilos: ciclo de vida nacido Invocación de un método Cumplió condición Asignar procesador parado ejecutable Completar E/S Termina quantum listo ejecución Solicitud E/S Invocación de métodos en espera dormido Expira el tiempo Ing. E. D'Agostino suspendido muerto INFORMATICA III - 2007 bloqueado Invocación de un método 22 Sincronización Pueden operar en forma independiente. Cada uno tiene todos los datos y métodos que necesita. Ing. E. D'Agostino INFORMATICA III - 2007 No necesito sincronización 23 Sincronización Comparten datos y deben considerar el estado y las actividades de otros threads. Errores: interferencia de threads inconsistencia de memoria Ing. E. D'Agostino INFORMATICA III - 2007 24 Sincronización Comparten datos y deben considerar el estado y las actividades de otros threads. Necesito sincronización Ing. E. D'Agostino INFORMATICA III - 2007 25 Sincronización •Iinterferencia de threads: múltiples threads acceden a datos compartidos •Errores de inconsistencia en la memoria: son errores que resultan de vistas inconsistentes de la memoria. •Métodos sincronizados: métodos simples que pueden prevenir los dos errores anteriores •Candados implícitos y sincronización: la sincronización está basada en candados implícitos Ing. E. D'Agostino INFORMATICA III - 2007 26 Interferencia de threads class Counter { private int c = 0; public void increment() { c++; } //recuperar el valor de c //incrementarlo en 1 //almacenarlo nuevamente public void decrement() { c--; } //recuperar el valor de c //decrementarlo en 1 //almacenarlo nuevamente public int value() { return c; } } Ing. E. D'Agostino INFORMATICA III - 2007 27 Errores de inconsistencia en la memoria Los valores almacenados en memoria van a depender de la secuencia en que se ejecuten las acciones cuando haya múltiples threads compartiendo un objeto. Ing. E. D'Agostino INFORMATICA III - 2007 28 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. Ing. E. D'Agostino INFORMATICA III - 2007 29 Definición de métodos sincronizados public class SynchronizedCounter { private int c = 0; public synchronized void increment() { c++; } public synchronized void decrement() { c-;} public synchronized int value() { return c; } } Ing. E. D'Agostino INFORMATICA III - 2007 30 Definición de 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; }} Ing. E. D'Agostino INFORMATICA III - 2007 31 Candados implícitos y sincronización Cuando un thread invoca un método sincronizado es como si encerrara el objeto con un candado, de forma que nadie pueda accederlo. Lo libera cuando el método ejecuta un return. Ing. E. D'Agostino INFORMATICA III - 2007 32 PRODUCTOR - CONSUMIDOR • Problema tipo que ejemplifica la necesidad de sincronización Ing. E. D'Agostino INFORMATICA III - 2007 33 Sincronización Escenarios productor /consumidor Un thread escribe datos en un archivo Otro thread lee datos del archivo Comparten recursos Ing. E. D'Agostino debo sincronizarlos INFORMATICA III - 2007 34 Sincronización •Solo un thread por vez puede acceder a un objeto bloquea Thread Thread Ing. E. D'Agostino INFORMATICA III - 2007 35 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. Ing. E. D'Agostino INFORMATICA III - 2007 36 Métodos sincronizados Instancia (bloquean objetos) Métodos sincronizados Clase (bloquean clases) Ing. E. D'Agostino INFORMATICA III - 2007 37 Como trabajan los 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. Ing. E. D'Agostino INFORMATICA III - 2007 38 Prioridades de los threads La prioridad de un thread lo afecta cuando se está ejecutando en relación a otros threads. Ing. E. D'Agostino INFORMATICA III - 2007 39 Prioridades estado listo prioridad 10 SO entrega el control a uno estado listo prioridad 9 .................. .................. • • • • wait suspend sleep I/O •otro de prioridad • yield mayor pasa a listo •expira su quantum estado listo prioridad 1 Ing. E. D'Agostino INFORMATICA III - 2007 40 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 Ing. E. D'Agostino INFORMATICA III - 2007 41 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) Ing. E. D'Agostino INFORMATICA III - 2007 42 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. Ing. E. D'Agostino INFORMATICA III - 2007 43 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. expira su quantum. Ing. E. D'Agostino INFORMATICA III - 2007 44 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. Ing. E. D'Agostino INFORMATICA III - 2007 45 Sincronización de hilos Ejemplo: Ing. E. D'Agostino INFORMATICA III - 2007 46 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. Ing. E. D'Agostino INFORMATICA III - 2007 47 Técnicas de concurrencia • Exclusión mutua: utilizar variables de datos compartidas entre procesos. • Secciones críticas: aquellas parte de los programas que no pueden ejecutar concurrentemente dos procesos. • Bloqueo: Se debe poder bloquear las secciones críticas. Ing. E. D'Agostino INFORMATICA III - 2007 48 Técnicas de concurrencia • Asegurarse que no ocurra interbloqueo.(dos threads se bloquean uno a otro) • Asegurarse que no ocurra cierre. (un thread depende de la acción de otro y este a su vez de la acción de otro y ninguno progresa) Ing. E. D'Agostino INFORMATICA III - 2007 49 Técnicas de concurrencia • Semáforos: indicador que registra si un recurso está disponible o no. – inicializar(Semáforo s , int v) – espera (s) (bloquea) – señal (s) (desbloqueo) Ing. E. D'Agostino INFORMATICA III - 2007 50 Técnicas de concurrencia • Monitores: conjunto de procesos que proporciona el acceso a la sección crítica con exclusión mutua. Sólo un proceso puede estar activo por vez para ejecutar un proceso del monitor. Mas problemas para sincronización que con semáforos. Ing. E. D'Agostino INFORMATICA III - 2007 51 Java.util.concurrency Provee objetos de alto nivel de concurrencia: Objetos lock: provee objetos que simplifican las aplicaciones concurrentes. Solo un thread puede apropiarse de un objeto lock Ing. E. D'Agostino INFORMATICA III - 2007 52 Interfaces Interfaces ejecutoras: • Executor, una interface que soporta lanzar nuevas tareas. • ExecutorService, una subinterface de Executor, que agrega características que ayudan a manejar el ciclo de vida, de las tareas y de Executor. • ScheduledExecutorService, una subinterface de ExecutorService, soporta la ejecución de tareas periódicas y/o futuras. Ing. E. D'Agostino INFORMATICA III - 2007 53