Concurrente 1
Concurrente 1
2021-1
1
Programación sequencial
2
Programación sequencial
+ Las instrucciones se ejecutan en orden.
3
Programación sequencial
+ Las instrucciones se ejecutan en orden.
+ Siempre es posible predecir el resultado de un
programa conociendo la entrada.
4
Programación sequencial
+ Las instrucciones se ejecutan en orden.
+ Siempre es posible predecir el resultado de un
programa conociendo la entrada.
public class Counter {
private int counter = 0;
5
Programación sequencial
+ Las instrucciones se ejecutan en orden.
+ Siempre es posible predecir el resultado de un
programa conociendo la entrada.
public class Counter {
private int counter = 0; Counter counter = new Counter();
counter.run();
public void run() { counter.run();
counter++; S.out.println(counter.get());
}
}
6
Programación sequencial
$
7
Programación sequencial
$ java Counter
2
$
8
Programación sequencial
$ java Counter
2
$ java Counter
2
$
9
Programación sequencial
$ java Counter
2
$ java Counter
2
$ java Counter
2
$
10
Añadiendo Concurrencia
11
Añadiendo Concurrencia
+ No tenemos control en el orden de ejecución.
12
Añadiendo Concurrencia
+ No tenemos control en el orden de ejecución.
+ Utilizando threads en Java se añaden 2 ejecuciones
independientes.
Counter counter = new Counter();
Thread h1 = new Thread(counter);
Thread h2 = new Thread(counter);
h1.start();
h2.start();
h1.join(); h2.join();
System.out.println(counter.get());
13
Añadiendo Concurrencia
$
14
Añadiendo Concurrencia
$ java Counter
2
$
15
Añadiendo Concurrencia
$ java Counter
2
$ java Counter
2
$
16
Añadiendo Concurrencia
$ java Counter
2
$ java Counter
2
$ java Counter
1
$
17
Añadiendo Concurrencia
$ java Counter
! Bienvenido a
2
la programación
$ java Counter
concurrente!
2
$ java Counter
1
$
18
Añadiendo Concurrencia
19
Porqué Utilizar Concurrencia?
20
Porqué Utilizar Concurrencia?
+ Abstracción: Separar tareas sin preocuparse cuando
ejecutarlas (Descargar múltiples archivos)
21
Porqué Utilizar Concurrencia?
+ Abstracción: Separar tareas sin preocuparse cuando
ejecutarlas (Descargar múltiples archivos)
+ Responsividad: Proveer una interfaz de usuario
responsiva con diferentes tareas ejecutandose
independientemente (Chrome, Office, Música, etc)
22
Porqué Utilizar Concurrencia?
+ Abstracción: Separar tareas sin preocuparse cuando
ejecutarlas (Descargar múltiples archivos)
+ Responsividad: Proveer una interfaz de usuario
responsiva con diferentes tareas ejecutandose
independientemente (Chrome, Office, Música, etc)
+ Desempeño: Dividir tareas complejas para reducir
tiempo de procesamiento.
23
La Tendencia Apunta al Cómputo Concurrente
La Tendencia Apunta al Cómputo Concurrente
+ Anteriormente: La velocidad del procesador se
incrementaba sin cambios significativos en la
arquitectura.
La Tendencia Apunta al Cómputo Concurrente
+ Anteriormente: La velocidad del procesador se
incrementaba sin cambios significativos en la
arquitectura.
+ El programa se ejecuta más rápido sin
modificaciones.
La Tendencia Apunta al Cómputo Concurrente
+ Anteriormente: La velocidad del procesador se
incrementaba sin cambios significativos en la
arquitectura.
+ El programa se ejecuta más rápido sin
modificaciones.
La Tendencia Apunta al Cómputo Concurrente
+ Anteriormente: La velocidad del procesador se
incrementaba sin cambios significativos en la
arquitectura.
+ El programa se ejecuta más rápido sin
modificaciones.
La Tendencia Apunta al Cómputo Concurrente
+ Anteriormente: La velocidad del procesador se
incrementaba sin cambios significativos en la
arquitectura.
+ El programa se ejecuta más rápido sin
modificaciones.
La Tendencia Apunta al Cómputo Concurrente
+ Anteriormente: La velocidad del procesador se
incrementaba sin cambios significativos en la
arquitectura.
+ El programa se ejecuta más rápido sin
modificaciones.
La Tendencia Apunta al Cómputo Concurrente
+ Anteriormente: La velocidad del procesador se
incrementaba sin cambios significativos en la
arquitectura.
+ El programa se ejecuta más rápido sin
modificaciones.
La Tendencia Apunta al Cómputo Concurrente
+ Anteriormente: La velocidad del procesador se
incrementaba sin cambios significativos en la
arquitectura.
+ El programa se ejecuta más rápido sin
modificaciones.
+ Actualmente: La velocidad se mantiene pero el número
de “cores” se incrementa.
La Tendencia Apunta al Cómputo Concurrente
+ Anteriormente: La velocidad del procesador se
incrementaba sin cambios significativos en la
arquitectura.
+ El programa se ejecuta más rápido sin
modificaciones.
+ Actualmente: La velocidad se mantiene pero el número
de “cores” se incrementa.
La Tendencia Apunta al Cómputo Concurrente
+ Anteriormente: La velocidad del procesador se
incrementaba sin cambios significativos en la
arquitectura.
+ El programa se ejecuta más rápido sin
modificaciones.
+ Actualmente: La velocidad se mantiene pero el número
de “cores” se incrementa.
La Tendencia Apunta al Cómputo Concurrente
+ Anteriormente: La velocidad del procesador se
incrementaba sin cambios significativos en la
arquitectura.
+ El programa se ejecuta más rápido sin
modificaciones.
+ Actualmente: La velocidad se mantiene pero el número
de “cores” se incrementa.
La Tendencia Apunta al Cómputo Concurrente
+ Si no se programa pensando
en concurrencia los
programas permanecen
lentos.
La Tendencia Apunta al Cómputo Concurrente
+ Si no se programa pensando
en concurrencia los
programas permanecen
lentos.
Cómo Logramos Concurrencia?
38
Cómo Logramos Concurrencia?
+ Múltiples computadoras
39
Cómo Logramos Concurrencia?
+ Múltiples computadoras
+ Múltiples procesos
40
Cómo Logramos Concurrencia?
+ Múltiples computadoras
+ Múltiples procesos
41
Cómo Logramos Concurrencia?
+ Múltiples computadoras
+ Múltiples procesos
43
Concurrencia vs Paralelismo
+ Usualmente se utilizan ambos términos en forma
indistinta.
44
Concurrencia vs Paralelismo
+ Usualmente se utilizan ambos términos en forma
indistinta.
45
Concurrencia vs Paralelismo
+ Usualmente se utilizan ambos términos en forma
indistinta.
46
Concurrencia vs Paralelismo
Concurrencia sin paralelismo
Primero No,
tú primero tú
47
Concurrencia vs Paralelismo
Concurrencia sin paralelismo Concurrencia con paralelismo
Hola
Hola
Primero Ana!
No, Bob!
tú primero tú
48
Concurrencia vs Paralelismo
Concurrencia sin paralelismo Concurrencia con paralelismo
Hola
Hola
Primero Ana!
No, Bob!
tú primero tú
49
Concurrencia vs Paralelismo
Concurrencia sin paralelismo Concurrencia con paralelismo
50
Concurrencia vs Paralelismo
Concurrencia sin paralelismo Concurrencia con paralelismo
51
Concurrencia vs Paralelismo
Concurrencia sin paralelismo Concurrencia con paralelismo
52
Concurrencia vs Paralelismo
Concurrencia sin paralelismo Concurrencia con paralelismo
53
Concurrencia vs Paralelismo
54
Concurrencia vs Paralelismo
+ Ejemplo:
Concurrencia: ?
Paralelismo: ?
55
Concurrencia vs Paralelismo
+ Ejemplo:
Concurrencia: Todos obtienen
un lugar (justicia) y que es
usado por a lo más un carro
(exclusión mutua).
Paralelismo: ?
56
Concurrencia vs Paralelismo
+ Ejemplo:
Concurrencia: Todos obtienen
un lugar (justicia) y que es
usado por a lo más un carro
(exclusión mutua).
57
Concurrencia vs Paralelismo
+ Ejemplo:
Concurrencia: Todos obtienen
un lugar (justicia) y que es
usado por a lo más un carro
(exclusión mutua).
Solución: Calendario,
candados, semáforos señales
58
Taxonomía de Flynn
Un dato Múltiples datos
Una instrucción
Múltiples instrucciones
59
Ley de Amdahl
+ Si un proceso se tarda 10 minutos en completar una
tarea. Diez de ellos lo harán en 1 minuto?
60
Ley de Amdahl
+ Si un proceso se tarda 10 minutos en completar una
tarea. Diez de ellos lo harán en 1 minuto?
61
Ley de Amdahl
+ Si un proceso se tarda 10 minutos en completar una
tarea. Diez de ellos lo harán en 1 minuto?
62
Ley de Amdahl
+ La ley de Amhdal menciona que el máximo speedup
alcanzable por n procesos esta limitado por la fracción
p del programa que puede ser paralelizable.
63
Ley de Amdahl
+ La ley de Amhdal menciona que el máximo speedup
alcanzable por n procesos esta limitado por la fracción
p del programa que puede ser paralelizable.
1
!"##$%" (n) = "
1−" +-
Secuencial Paralela
64
Ley de Amdahl
+ Con n = 10 procesos, que tan cercanos estamos de
alcanzar 10x:
50% 50%
20% 80%
10% 90%
1% 99%
65
Ley de Amdahl
+ Con n = 10 procesos, que tan cercanos estamos de
alcanzar 10x:
20% 80%
10% 90%
1% 99%
66
Ley de Amdahl
+ Con n = 10 procesos, que tan cercanos estamos de
alcanzar 10x:
10% 90%
1% 99%
67
Ley de Amdahl
+ Con n = 10 procesos, que tan cercanos estamos de
alcanzar 10x:
1% 99%
68
Ley de Amdahl
+ Con n = 10 procesos, que tan cercanos estamos de
alcanzar 10x:
1% 99% 9.17
69
Ley de Amdahl
70
Terminología Básica
+ Proceso: una unidad independiente de
ejecución, poseé dentificador,
contador de programa y memoria.
71
Terminología Básica
+ Proceso: una unidad independiente de
ejecución, poseé dentificador,
contador de programa y memoria.
72
Terminología Básica
+ Hilos: es una unidad independiente de ejecución en
el mismo espacio de un proceso. Poseé identificador,
contador de programa y memoria (local y
compartida).
73
Terminología Básica
+ Hilos: es una unidad independiente de ejecución en
el mismo espacio de un proceso. Poseé identificador,
contador de programa y memoria (local y
compartida).
74
Terminología Básica
+ Hilos: es una unidad independiente de ejecución en
el mismo espacio de un proceso. Poseé identificador,
contador de programa y memoria (local y
compartida).
75
Terminología Básica
+ Hilos: es una unidad independiente de ejecución en
el mismo espacio de un proceso. Poseé identificador,
contador de programa y memoria (local y
compartida).
76
Terminología Básica
CPU 1 CPU 2
77
Terminología Básica
Ready: Listo para ser
ejecutado, pero no se le
ha asignado un CPU.
CPU 1 CPU 2
78
Terminología Básica
Running: Ejecutando las
instrucciones en un CPU.
CPU 1 CPU 2
79
Terminología Básica
Blocked: Esperando a que
un evento suceda. Liberar
recurso compartido.
CPU 1 CPU 2
80
Terminología Básica
CPU 1 CPU 2
81
Terminología Básica
Tiempo
en
CPU2
CPU 1 CPU 2
82
Terminología Básica
CPU 1 CPU 2
83
Terminología Básica
Pase usted
buen
joven
CPU 1 CPU 2
84
Terminología Básica
CPU 1 CPU 2
85
Terminología Básica
CPU 1 CPU 2
86
Terminología Básica
Espera
en la
banca
CPU 1 CPU 2
87
Terminología Básica
CPU 1 CPU 2
88
Terminología Básica
Pase
usted.
CPU 1 CPU 2
89
Terminología Básica
CPU 1 CPU 2
90
Terminología Básica
CPU 1 CPU 2
Estoy
listo
91
Terminología Básica
Ok, a la
cola.
CPU 1 CPU 2
92
Terminología Básica
CPU 1 CPU 2
93
Terminología Básica
Terminé
CPU 1 CPU 2
94
Terminología Básica
Ok, se
libre!
CPU 1 CPU 2
95
Terminología Básica
CPU 1 CPU 2
96
Terminología Básica
Siguiente
CPU 1 CPU 2
97
Terminología Básica
CPU 1 CPU 2
98
Terminología Básica
Blocked wait
event
resume
suspend
99
Memoria Compartida vs Paso de Mensajes
100
Memoria Compartida vs Paso de Mensajes
La comunicación se basa
en escrituras a través de una
memoria compartida.
Sistemas multicore.
Memoria
Compartida
Thread T1 …. Thread Tn
101
Memoria Compartida vs Paso de Mensajes
La comunicación se basa La comunicación se basa
en escrituras a través de una en intercambio de
memoria compartida. mensajes. Sistemas
Sistemas multicore. distribuidos.
Memoria
Compartida Memoria Memoria
102
Herramientas para Cómputo Concurrente
103
Hilos en Java
+ Existen dos maneras de construir programas concurrentes en
Java:
104
Hilos en Java
+ Existen dos maneras de construir programas concurrentes en
Java:
+ Extender la clase Thread y sobreescribir el método run:
105
Hilos en Java
+ Existen dos maneras de construir programas concurrentes en
Java:
+ Extender la clase Thread y sobreescribir el método run:
106
Hilos en Java
+ Un objecto t de tipo Thread tiene acceso a los siguientes
métodos:
107
Hilos en Java
+ Un objecto t de tipo Thread tiene acceso a los siguientes
métodos:
+ t.start(): Marca un hilo listo para ejecutarse.
108
Hilos en Java
+ Un objecto t de tipo Thread tiene acceso a los siguientes
métodos:
+ t.start(): Marca un hilo listo para ejecutarse.
+ Thread.sleep(n): Bloquea el hilo actual por al menos n
milisegundos (depende de la máquina virtual).
109
Hilos en Java
+ Un objecto t de tipo Thread tiene acceso a los siguientes
métodos:
+ t.start(): Marca un hilo listo para ejecutarse.
+ Thread.sleep(n): Bloquea el hilo actual por al menos n
milisegundos (depende de la máquina virtual).
+ t.join(): Bloquea el hilo actual hasta que t termine.
110
Hilos en Java
+ Un objecto t de tipo Thread tiene acceso a los siguientes
métodos:
+ t.start(): Marca un hilo listo para ejecutarse.
+ Thread.sleep(n): Bloquea el hilo actual por al menos n
milisegundos (depende de la máquina virtual).
+ t.join(): Bloquea el hilo actual hasta que t termine.
+ Los hilos se ejecutan de manera asíncrona, por lo que
deben de coordinarse y sincronizarse a través de objetos
compartidos.
111