100% encontró este documento útil (1 voto)
84 vistas

Concurrente 1

El documento introduce los conceptos de programación secuencial y concurrente. Explica que en la programación secuencial las instrucciones se ejecutan de forma ordenada y es posible predecir el resultado, mientras que en la programación concurrente no hay control sobre el orden de ejecución debido a la adición de hilos. También discute las ventajas de usar concurrencia como abstracción, responsividad y desempeño, y cómo la tendencia actual es hacia arquitecturas con múltiples núcleos que requieren programación concurrente para aprovechar la capacidad de

Cargado por

Carlo Isaac
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
84 vistas

Concurrente 1

El documento introduce los conceptos de programación secuencial y concurrente. Explica que en la programación secuencial las instrucciones se ejecutan de forma ordenada y es posible predecir el resultado, mientras que en la programación concurrente no hay control sobre el orden de ejecución debido a la adición de hilos. También discute las ventajas de usar concurrencia como abstracción, responsividad y desempeño, y cómo la tendencia actual es hacia arquitecturas con múltiples núcleos que requieren programación concurrente para aprovechar la capacidad de

Cargado por

Carlo Isaac
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 111

Computación Concurrente

2021-1

Manuel Alcántara Juárez


[email protected]

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;

public void run() {


counter++;
}
}

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

+ Múltiples hilos de ejecución

41
Cómo Logramos Concurrencia?
+ Múltiples computadoras

+ Múltiples procesos

+ Múltiples hilos de ejecución

+ Cualquier combinación de las anteriores


42
Concurrencia vs Paralelismo

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.

Concurrecia: Composición no determinista de


ejecuciones indendientes. Que sucede en un orden
no secuencial. (Paralelismo Lógico)

45
Concurrencia vs Paralelismo
+ Usualmente se utilizan ambos términos en forma
indistinta.

Concurrecia: Composición no determinista de


ejecuciones indendientes. Que sucede en un orden
no secuencial. (Paralelismo Lógico)

Paralelismo: Ejecución eficiente en múltiples unidades


de procesamiento. Que sucede al mismo tiempo.
(Paralelismo físico)

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ú

Paralelismo sin concurrencia

49
Concurrencia vs Paralelismo
Concurrencia sin paralelismo Concurrencia con paralelismo

Paralelismo sin concurrencia

50
Concurrencia vs Paralelismo
Concurrencia sin paralelismo Concurrencia con paralelismo

Paralelismo sin concurrencia

51
Concurrencia vs Paralelismo
Concurrencia sin paralelismo Concurrencia con paralelismo

Paralelismo sin concurrencia

52
Concurrencia vs Paralelismo
Concurrencia sin paralelismo Concurrencia con paralelismo

Paralelismo sin concurrencia

53
Concurrencia vs Paralelismo

Situación Ideal Situación común

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).

Paralelismo: Distribuir los carros


uniformemente entre los lugares
disponibles.

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).

Paralelismo: Distribuir los carros


uniformemente entre los lugares
disponibles.

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?

tiempo de ejecución secuencial


!"##$%" =
tiempo ejecución paralela

61
Ley de Amdahl
+ Si un proceso se tarda 10 minutos en completar una
tarea. Diez de ellos lo harán en 1 minuto?

tiempo de ejecución secuencial 10


!"##$%" = = = 109
tiempo ejecución paralela 1

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:

% Sencuencial % Paralelo Speedup máximo

50% 50%

20% 80%

10% 90%

1% 99%

65
Ley de Amdahl
+ Con n = 10 procesos, que tan cercanos estamos de
alcanzar 10x:

% Sencuencial % Paralelo Speedup máximo

50% 50% 1.81

20% 80%

10% 90%

1% 99%

66
Ley de Amdahl
+ Con n = 10 procesos, que tan cercanos estamos de
alcanzar 10x:

% Sencuencial % Paralelo Speedup máximo

50% 50% 1.81

20% 80% 3.57

10% 90%

1% 99%

67
Ley de Amdahl
+ Con n = 10 procesos, que tan cercanos estamos de
alcanzar 10x:

% Sencuencial % Paralelo Speedup máximo

50% 50% 1.81

20% 80% 3.57

10% 90% 5.26

1% 99%

68
Ley de Amdahl
+ Con n = 10 procesos, que tan cercanos estamos de
alcanzar 10x:

% Sencuencial % Paralelo Speedup máximo

50% 50% 1.81

20% 80% 3.57

10% 90% 5.26

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.

+ Calendarizador (Scheduler): Programa


que se encarga de asignar los
procesos a los procesadores
disponibles.

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

new Ready Running terminate

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

Memoria Local Memoria Local

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

Thread T1 …. Thread Tn Proceso P1 …. Proceso Pn

Memoria Local Memoria Local

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:

public class Counter extends Thread

105
Hilos en Java
+ Existen dos maneras de construir programas concurrentes en
Java:
+ Extender la clase Thread y sobreescribir el método run:

public class Counter extends Thread

+ Implementar la clase Runnable y definir el método run:

public class Counter implements Runnable

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

También podría gustarte