0% encontró este documento útil (0 votos)
7 vistas149 páginas

ProCon C01

El documento presenta un curso sobre Programación Concurrente, detallando las comisiones, calendario y requisitos de aprobación. Se discuten los paradigmas de programación, la diferencia entre programación secuencial y concurrente, y se incluyen ejemplos de código para ilustrar estos conceptos. Además, se abordan las ventajas de la programación concurrente en términos de eficiencia y capacidad de respuesta en aplicaciones.

Cargado por

mmilagroscarucci
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
0% encontró este documento útil (0 votos)
7 vistas149 páginas

ProCon C01

El documento presenta un curso sobre Programación Concurrente, detallando las comisiones, calendario y requisitos de aprobación. Se discuten los paradigmas de programación, la diferencia entre programación secuencial y concurrente, y se incluyen ejemplos de código para ilustrar estos conceptos. Además, se abordan las ventajas de la programación concurrente en términos de eficiencia y capacidad de respuesta en aplicaciones.

Cargado por

mmilagroscarucci
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

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

También podría gustarte