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