Programación
Concurrente
Martha Semken - Carlos N. Jiménez
Gabriel Álvarez - Facundo Palacios
1
Clase #0
2
Grupo de Telegram
3
Sobre la materia y la
cursada
4
Comisiones 1y2
5
Com 01:
¿Cuándo? Miércoles (V) y
Viernes (P) de
18:00 a 22:00
6
Com 02:
¿Cuándo? Miércoles (V) y
Jueves (P) de
18:00 a 22:00
7
¿Dónde? Jueves: MA112
Viernes: MA110
8
04/02 C01
Calendario
06/02 C02
11/02 C03
(tentativo)
13/02 C04
18/02 C05
20/02 C06
25/02 C07 (Rep.)
27/02 C08 (1P)
9
Aprobación de
la materia ● Promoción
10
Aprobación de ● Promoción
● Evaluación
la materia Integradora
11
Aprobación de ● Promoción
● Evaluación
la materia Integradora
● Exámen Final o
Libre
12
● Aprobar la cursada
de la materia
Promoción (promedio) con una
nota no inferior a 7
“sin mediar
redondeo” (art. 17
del RA).
13
● Aprobar la cursada
de la materia
(promedio) con una
Promoción nota no inferior a 7
“sin mediar
redondeo” (art. 17
del RA).
● No obtener una nota
inferior a 6 en
ambos parciales.
14
● Quienes hayan
Integrador aprobado la
cursada con una
nota entre 4 y 6.
15
● Quienes hayan
aprobado la
Integrador cursada con una
nota entre 4 y 6.
● Se evalúan los
contenidos vistos
en la cursada.
16
● Quienes hayan
aprobado la
cursada con una
nota entre 4 y 6.
Integrador ● Se evalúan los
contenidos vistos
en la cursada.
● Mismo día, horario
y docente de la
cursada.
17
Final ● Quienes opten por no
rendir la Evaluación
Integradora.
18
● Quienes opten por no
rendir la Evaluación
Final ●
Integradora.
O hayan regularizado la
materia en
cuatrimestres
anteriores.
19
● Quienes opten por no
rendir la Evaluación
Integradora.
Final
● O hayan regularizado la
materia en
cuatrimestres
anteriores.
● Se evalúa la totalidad
de los contenidos del
programa.
20
● Quienes opten por no
rendir la Evaluación
Integradora.
O hayan regularizado la
Final
●
materia en
cuatrimestres
anteriores.
● Se evalúa la totalidad
de los contenidos del
programa.
● Se aprueba con nota
igual o superior a 4.
21
● Quienes opten por no
rendir la Evaluación
Integradora.
● O hayan regularizado la
Final
materia en cuatrimestres
anteriores.
● Se evalúa la totalidad de
los contenidos del
programa.
● Se aprueba con nota igual
o superior a 4.
● Fecha, hora y docente a
determinar por la
Universidad
22
Libre ● Destinada a
estudiantes que no
hayan regularizado la
materia.
23
● Destinada a
Libre
estudiantes que no
hayan regularizado la
materia.
● Se evalúa la totalidad
de los contenidos del
programa.
24
● Destinada a
estudiantes que no
Libre
hayan regularizado la
materia.
● Se evalúa la totalidad
de los contenidos del
programa.
● Se aprueba con nota
igual o superior a 4.
25
● Destinada a
estudiantes que no
hayan regularizado la
materia.
Libre ● Se evalúa la totalidad
de los contenidos del
programa.
● Se aprueba con nota
igual o superior a 4.
● Fecha, hora y docente a
determinar por la
Universidad
26
● Destinada a
estudiantes que no
hayan regularizado la
materia.
Se evalúa la totalidad
Libre
●
de los contenidos del
programa.
● Se aprueba con nota
igual o superior a 4.
● Fecha, hora y docente a
determinar por la
Universidad
● Dos instancias: escrita
y oral (Art.21)
27
Programación
Concurrente ● Estructura de Datos
(correlativas)
28
Programación
Concurrente ●
●
Estructura de Datos
Introducción a la
Programación
(correlativas)
29
Clase #1
30
Introducción
31
Paradigmas de la
Programación
32
Paradigmas
de la
● Estilos o forma de pensar
cómo se estructura el
código
Programación
33
Paradigmas ● Estilos o forma de pensar
cómo se estructura el
código
de la ○ Imperativo
○ Orientado a Objetos
○ Funcional
Programación ○ Lógico
○ Declarativo
34
Paradigmas Cada uno propone distintas
formas de manejar:
de la ●
●
el estado
el flujo de ejecución
Programación
● la comunicación entre
partes del programa
35
Importancia ● Cuando un programa
de los
puede avanzar en varias
tareas al mismo tiempo y
comparten recursos
Paradigmas
aparecen errores
36
Importancia ● Imperativos: Varios hilos
de los
modificando las mismas
variables
● Orientado a Objetos: Dos
Paradigmas
hilos modificando el mismo
objeto al mismo tiempo
37
Programación
Secuencial
38
Programación ● Las instrucciones o pasos
se ejecutan uno tras otro
Secuencial
en un orden específico y
predefinido.
39
● Las instrucciones o pasos
Programación se ejecutan uno tras otro
en un orden específico y
predefinido.
Secuencial
● El flujo de control es lineal
y no hay bifurcaciones ni
ciclos que alteren el orden
de ejecución.
40
● Las instrucciones o pasos
se ejecutan uno tras otro
en un orden específico y
predefinido.
Programación ● El flujo de control es lineal
y no hay bifurcaciones ni
ciclos que alteren el orden
Secuencial
de ejecución.
● Es decir, cada instrucción
se ejecuta después de que
la anterior ha terminado,
siguiendo un camino
directo desde el inicio
hasta el final del programa.
41
42
43
T1
T2 ● Son Ordenados
T3
44
T1
● Son Ordenados
T2 ● Son Deterministas
T3
45
Programación
Concurrente
46
● Son Ordenados
● Son Deterministas
47
Programación ● Varias tareas o procesos se
ejecutan simultáneamente o
de forma intercalada dentro
Concurrente de un sistema, en lugar de
ejecutarse secuencialmente
uno después de otro.
48
Varias tareas o procesos se
Programación
●
ejecutan simultáneamente o
de forma intercalada dentro
de un sistema, en lugar de
Concurrente
ejecutarse secuencialmente
uno después de otro.
● Permite aprovechar mejor los
recursos del sistema (CPU,
memoria, etc.)
49
● Varias tareas o procesos se
ejecutan simultáneamente o
de forma intercalada dentro
de un sistema, en lugar de
Programación
ejecutarse secuencialmente
uno después de otro.
● Permite aprovechar mejor los
recursos del sistema (CPU,
Concurrente ●
memoria, etc.)
Útil en aplicaciones que
necesitan manejar múltiples
tareas al mismo tiempo
(servidores web, sistemas en
tiempo real, o aplicaciones
interactivas).
50
import time
# Función que simula una tarea que toma tiempo
def tarea_demorada(segundos):
print(f"Comenzando tarea que tomará {segundos} segundos")
[Link](segundos)
return f"Tarea completada en {segundos} segundos"
# Ejecutar tareas secuencialmente
def main():
tiempos = [5, 3, 2, 1] # Diferentes tiempos para simular tareas
resultados = []
inicio = time.perf_counter() # Inicio del cronómetro
for segundos in tiempos:
resultado = tarea_demorada(segundos)
[Link](resultado)
fin = time.perf_counter() # Fin del cronómetro
duracion_real = fin - inicio
for resultado in resultados:
print(resultado)
print(f"\nDuración real de la ejecución: {duracion_real:.2f} segundos")
if __name__ == "__main__": Secuencial
main()
51
import [Link]
import time
# Función que simula una tarea que toma tiempo
def tarea_demorada(segundos):
print(f"Comenzando tarea que tomará {segundos} segundos")
[Link](segundos)
return f"Tarea completada en {segundos} segundos"
# Ejecutar tareas concurrentemente
def main():
tiempos = [5, 3, 2, 1] # Diferentes tiempos para simular tareas
inicio = time.perf_counter() # Inicio del cronómetro
# Usando ThreadPoolExecutor para manejar hilos
with [Link]() as executor:
resultados = list([Link](tarea_demorada, tiempos))
fin = time.perf_counter() # Fin del cronómetro
duracion_real = fin - inicio
for resultado in resultados:
print(resultado)
print(f"\nDuración real de la ejecución: {duracion_real:.2f} segundos")
if __name__ == "__main__": Concurrente
main()
52
Tareas
4
3
2
1
0 5 8 10 11 Tiempo (s)
Secuencial
53
Tareas
4
3
2
1
0 5 8 10 11 Tiempo (s)
Concurrente
54
Programación ● Mejor Utilización de
Recursos: Permite hacer un
Concurrente uso más eficiente de la CPU y
otros recursos del sistema.
55
● Mejor Utilización de
Programación
Recursos: Permite hacer un
uso más eficiente de la CPU y
otros recursos del sistema.
Interactividad: Mejora la
Concurrente
●
capacidad de respuesta en
aplicaciones interactivas,
como interfaces gráficas de
usuario (GUI).
56
● Mejor Utilización de
Recursos: Permite hacer un
uso más eficiente de la CPU y
otros recursos del sistema.
Programación
● Interactividad: Mejora la
capacidad de respuesta en
aplicaciones interactivas, como
interfaces gráficas de usuario
Concurrente ●
(GUI).
Escalabilidad: Facilita la
construcción de aplicaciones
que pueden manejar
múltiples tareas o usuarios
simultáneamente, como
servidores de alta carga.
57
Programas
naturalmente ● Servidores web
concurrentes
58
Programas
naturalmente ●
●
Servidores web
Sistemas de bases de
datos
concurrentes
59
Programas ● Servidores web
naturalmente ● Sistemas de bases de
datos
Aplicaciones de
concurrentes
●
procesamiento de datos
60
Programas ●
●
Servidores web
Sistemas de bases de
naturalmente ●
datos
Aplicaciones de
procesamiento de datos
concurrentes ● Aplicaciones de
streaming multimedia
61
Programas ●
●
Servidores web
Sistemas de bases de
naturalmente
datos
● Aplicaciones de
procesamiento de datos
concurrentes ●
●
Aplicaciones de
streaming multimedia
Simulaciones científicas
62
Programas
● Servidores web
● Sistemas de bases de
datos
naturalmente
● Aplicaciones de
procesamiento de datos
● Aplicaciones de
concurrentes ●
●
streaming multimedia
Simulaciones científicas
Juegos multijugador en
línea
63
● Servidores web
Programas ●
●
Sistemas de bases de
datos
Aplicaciones de
naturalmente ●
procesamiento de datos
Aplicaciones de
streaming multimedia
concurrentes ●
●
Simulaciones científicas
Juegos multijugador en
línea
● Sistemas operativos
64
Programas, Procesos e
Hilos (Threads)
65
Programa ● Es un conjunto de
Instrucciones.
66
● Es un conjunto de
Instrucciones.
Programa
● Es un ente pasivo, es
simplemente código que
describe una serie de
tareas o funciones a
realizar
67
Proceso ● Es un programa en
ejecución (instancia), es
un ente activo.
68
● Es un programa en
ejecución (instancia), es
Proceso ●
un ente activo.
Tiene su propio espacio
de memoria y recursos
asignados por el SO.
69
● Es un programa en
ejecución (instancia), es
un ente activo.
● Tiene su propio espacio
Proceso de memoria y recursos
asignados por el SO.
● Cada proceso es
independiente y puede
ejecutar uno o más
threads.
70
Relación entre ● Un programa puede ser
programa y ejecutado varias veces y
cada ejecución dará
lugar a un proceso
proceso distinto.
71
Relación entre ● Un programa puede ser
ejecutado varias veces y
programa y
cada ejecución dará
lugar a un proceso
distinto.
proceso ● Un proceso es lo que
resulta de la ejecución de
un programa.
72
● Un programa puede ser
ejecutado varias veces y
cada ejecución dará
Relación entre ●
lugar a un proceso
distinto.
Un proceso es lo que
programa y resulta de la ejecución de
un programa.
Mientras que un
proceso
●
programa es
simplemente el código
en reposo, un proceso es
la realización activa de
ese código en un
Sistema Operativo.
73
Hilo (Thread) ● Unidad básica de
ejecución dentro de un
proceso.
74
● Unidad básica de
ejecución dentro de un
proceso.
Hilo (Thread) ● Es más liviano que un
proceso y comparte el
mismo espacio de
memoria y recursos con
otros hilos del mismo
proceso
75
● Unidad básica de
ejecución dentro de un
proceso.
● Es más liviano que un
proceso y comparte el
mismo espacio de
Hilo (Thread)
memoria y recursos con
otros hilos del mismo
proceso
● Los hilos dentro de un
mismo proceso pueden
comunicarse y compartir
datos fácilmente, ya que
operan en el mismo
espacio de direcciones
76
77
78
Relación entre ● Un proceso puede
Proceso e Hilo contener uno o varios
hilos.
79
● Un proceso puede
Relación entre
contener uno o varios
hilos.
● El proceso se encarga de
Proceso e Hilo la administración de los
recursos, mientras que
los hilos son las
entidades que realizan el
trabajo.
80
● Un proceso puede
contener uno o varios
hilos.
● El proceso se encarga de
Relación entre
la administración de los
recursos, mientras que
los hilos son las
Proceso e Hilo ●
entidades que realizan el
trabajo.
Los hilos permiten dividir
un proceso en múltiples
subunidades que pueden
correr en paralelo
compartiendo los
recursos del proceso.
81
Estados de un ● Los procesos en un
sistema operativo
proceso pueden encontrarse en
diferentes estados
durante su ciclo de vida.
82
● Los procesos en un
sistema operativo
Estados de un
pueden encontrarse en
diferentes estados
durante su ciclo de vida.
proceso ● Representan las
diferentes etapas por las
que pasa desde que se
crea hasta que se
termina.
83
● Los procesos en un
sistema operativo
pueden encontrarse en
diferentes estados
Estados de un
durante su ciclo de vida.
● Representan las
diferentes etapas por las
proceso que pasa desde que se
crea hasta que se
termina.
● Aunque los nombres
pueden variar entre
sistemas operativos, los
conceptos son similares.
84
● 1. Nuevo (New): El proceso
Estados de un
se ha creado pero aún no
está listo para ser
ejecutado. Faltan los
proceso recursos necesarios
Ejemplo: Un proceso
recién lanzado desde la
línea de comandos o por
una aplicación.
85
● 2. Listo (Ready): Está
preparado para
ejecutarse, pero la CPU
Estados de un está ocupada ejecutando
otro proceso. Está en la
cola de procesos listos
proceso para ser ejecutados.
Ejemplo: Un proceso
esperando que el CPU
esté disponible para
comenzar a ejecutar.
86
● 3. En Ejecución
(Running): El proceso está
siendo ejecutado por el
Estados de un
CPU. Es el único estado en
el que el proceso está
realmente ejecutando sus
proceso instrucciones en la CPU.
Ejemplo: Un proceso que
actualmente está
realizando cálculos o
manipulando datos en la
CPU.
87
● 4. Bloqueado o Esperando
(Blocked/Waiting): No puede
continuar ejecutándose hasta
que se cumpla alguna
Estados de un
condición o evento externo.
Esto puede incluir la espera de
la finalización de una
operación de entrada/salida
proceso (I/O), la disponibilidad de un
recurso, o la recepción de
una señal.
Ejemplo: Un proceso
esperando la lectura de datos
desde un disco o la entrada de
datos por parte del usuario.
88
● 5. Terminado
(Terminated/Exit): El proceso
ha terminado su ejecución.
Estados de un
En este estado, el proceso ha
liberado todos los recursos
asignados y su salida está
disponible para otros procesos
proceso o el sistema operativo.
Ejemplo: Un proceso que ha
terminado de ejecutar su
código y ha salido
normalmente o ha sido
terminado por algún error.
89
● 6. Suspendido o Dormido
(Suspended/Sleeping): Un
proceso puede ser suspendido
temporalmente, pero se
Estados de un puede reanudar en el futuro.
La suspensión puede ser
voluntaria (el proceso elige
proceso
suspenderse) o impuesta (el
sistema operativo lo
suspende).
Ejemplo: Un proceso en un
sistema multitarea que ha sido
movido a la memoria
secundaria para liberar
recursos.
90
● 7. Zombie: Ha terminado su
ejecución, pero su entrada en
la tabla de procesos aún existe
Estados de un
porque el proceso padre aún
no ha leído su estado de
salida (exit status). El proceso
ya no ejecuta, pero ocupa un
proceso espacio en la tabla de
procesos.
Ejemplo: Un proceso que ha
terminado pero cuyo proceso
padre no ha llamado a wait()
para recoger su estado de
salida.
91
● Nuevo (New)
● Listo (Ready)
Estados de un
● En Ejecución (Running)
● Bloqueado o Esperando
(Blocked/Waiting)
proceso ●
●
Terminado
(Terminated/Exit)
Suspendido o Dormido
(Suspended/Sleeping)
● Zombie
92
93
Lightweight
Threads o
● También conocidos
como Lightweight
Process (LWP)
Hilos Livianos
94
Lightweight ● También conocidos
como Lightweight
Threads o
Process (LWP)
● A diferencia de los hilos
comunes que son
Hilos Livianos gestionados por el
kernel,
95
● También conocidos
como Lightweight
Process (LWP)
Lightweight ● A diferencia de los hilos
comunes que son
gestionados por el
Threads o ●
kernel,
Los LWT son hilos
gestionados en el
Hilos Livianos espacio de usuario,
rápidos y eficientes para
operaciones simples,
pero con limitaciones en
cuanto a paralelismo y
manejo de bloqueos.
96
● Son los hilos
Threads
tradicionales,
gestionados
directamente por el
sistema operativo.
97
● Son los hilos
tradicionales,
gestionados
Threads
directamente por el
sistema operativo.
● Cada hilo tiene:
○ su propio stack
○ contexto de
ejecución
98
Threads ● El SO decide cuándo se
ejecutan
99
● El SO decide cuándo se
Threads
ejecutan
● Pueden ejecutarse
realmente en paralelo en
varios núcleos
100
Ventajas
Threads ● Paralelismo real
● Buen soporte del SO
● Útiles para tareas
intensivas de CPU
101
Ventajas
● Paralelismo real
● Buen soporte del SO
Threads ● Útiles para tareas
intensivas de CPU
Desventajas
● Crear/destruir hilos es
costoso
102
Lightweight
● También llamados:
○ hilos ligeros
○ green threads
Threads ○ fibers
○ virtual threads (Java
moderno)
103
● También llamados:
○ hilos ligeros
Lightweight
○ green threads
○ fibers
○ virtual threads (Java
Threads
moderno)
● Son gestionados por el
runtime del lenguaje, no
por el SO.
104
Lightweight Ventajas
● Rápidos de crear
Threads ● Ideales para I/O y
concurrencia masiva
● Código más simple
105
Ventajas
Lightweight
● Rápidos de crear
● Ideales para I/O y
concurrencia masiva
Threads ● Código más simple
Desventajas
● No siempre hay
paralelismo real directo
106
Sin LWT
107
Con LWT
108
Concurrencia ● Son conceptos
relacionados con la
y Paralelismo ejecución de múltiples
tareas.
109
● Son conceptos
Concurrencia relacionados con la
ejecución de múltiples
tareas.
y Paralelismo ● Pero difieren en cómo
estas tareas se gestionan
y ejecutan.
110
● Es la capacidad de un
Concurrencia sistema para gestionar
múltiples tareas al
mismo tiempo, pero no
simultáneamente.
111
● Es la capacidad de un
sistema para gestionar
múltiples tareas al
mismo tiempo, pero no
Concurrencia
simultáneamente.
● Aunque las tareas se
manejan como si se
ejecutan al mismo
tiempo, en realidad están
siendo alternadas,
especialmente en
sistemas mononúcleo.
112
Paralelismo
● Capacidad del sistema
para ejecutar múltiples
tareas realmente al
mismo tiempo.
113
● Capacidad del sistema
para ejecutar múltiples
tareas realmente al
Paralelismo ●
mismo tiempo.
Las tareas se ejecutan
simultáneamente
utilizando múltiples
núcleos de CPU o
múltiples CPUs.
114
● La multiprogramación es una
técnica utilizada en sistemas
Multiprogramación operativos para maximizar la
utilización de la CPU al
permitir que varios
programas se ejecuten
aparentemente al mismo
tiempo.
115
● La multiprogramación es una
técnica utilizada en sistemas
operativos para maximizar la
utilización de la CPU al
permitir que varios
programas se ejecuten
aparentemente al mismo
Multiprogramación ●
tiempo.
Esto se logra cargando
múltiples programas en la
memoria principal y
alternando su ejecución.
Cuando un programa se
detiene temporalmente, el
sistema operativo cambia a
otro programa, manteniendo
la CPU ocupada.
116
● Se refiere al mecanismo
Intercalación específico por el cual el
sistema operativo alterna
entre los diferentes
programas en la memoria.
117
● Se refiere al mecanismo
específico por el cual el
sistema operativo alterna
entre los diferentes
Intercalación ●
programas en la memoria.
Cada programa se ejecuta
durante un breve período de
tiempo (llamado "cuántum
de tiempo") antes de que el
sistema operativo cambie a
otro.
118
● Se refiere al mecanismo
específico por el cual el
sistema operativo alterna
entre los diferentes
programas en la memoria.
● Cada programa se ejecuta
Intercalación durante un breve período de
tiempo (llamado "cuántum
de tiempo") antes de que el
sistema operativo cambie a
otro.
● Esto da la impresión de que
los programas se ejecutan
simultáneamente, aunque en
realidad la CPU solo ejecuta
un programa a la vez.
119
● Técnica utilizada en sistemas
Multiprocesamiento
informáticos en la que se
emplean dos o más CPUs o
núcleos de procesamiento
para ejecutar múltiples
tareas simultáneamente.
120
● Técnica utilizada en sistemas
informáticos en la que se
emplean dos o más CPUs o
núcleos de procesamiento
para ejecutar múltiples
Multiprocesamiento ●
tareas simultáneamente.
A diferencia de la
multiprogramación, donde
una sola CPU alterna entre
tareas, el
multiprocesamiento permite
que varias CPUs o núcleos
trabajen en paralelo.
121
Hyper-Threading™
122
SMT (Simultaneous
Multi Threading)
123
Problemas de los
Programas Concurrentes
124
125
x=0
x=x+1
print x
126
x=0
x=x+1
print x
127
x=1
x=x+1
print x
128
x=1
x=x+1
print x = 1
129
x=0
x=x*2
print x
130
x=0
x=x*2
print x
131
x=0
x=x*2
print x = 0
132
x=0
x=x+1 x=x*2
print x print x
133
x=0
x=x+1 x=x*2
print x print x
134
x=1
x=x+1 x=x*2
print x print x
135
x=2
x=x+1 x=x*2
print x print x
136
x=2
x=x+1 x=x*2
print x = 2 print x = 2
137
x=0
x=x+1 x=x*2
print x print x
138
x=0
x=x+1 x=x*2
print x print x
139
x=1
x=x+1 x=x*2
print x = 1 print x = 1
140
x=1
x=x+1 x=x*2
print x = 1 print x = 1
141
142
Anécdotas sobre
concurrencia
143
144
145
146
Grupo de Telegram
147
Continuamos la
próxima clase
148