Está en la página 1de 13

APUNTES COSAS QUE DICE EN CLASE

Siempre que tenga concurrencia tengo o no tengo paralelismo?


El paralelismo siempre tiene concurrencia pero no al revés, ya que son tareas realizándose
a la vez pero la concurrencia no tiene por qué tener paralelismo no siempre los servicios
acaban a la vez
5 ejemplos de concurrencia y de paralelismo

**Ver que es la taxonomía de Flynn**: Clasificación de arquitecturas de computadores

SISD:
MISM
SIMD
MIMD: Varios procesadores que ejecutan instrucciones sobre datos diferentes (sistemas
distribuidos)

Caché: Memoria volátil de alta velocidad en el CPU (hay que conocer el medio por el que
vas a trabajar)

Concurrencia: Múltiples tareas realizándose al mismo tiempo en un espacio de tiempo


determinado y que no tienen porqué acabar a la vez
(Si es una sola tarea se llama ejecución de tipo secuencial)
Paralelismo: Múltiples tareas realizándose al mismo tiempo que van exactamente a la vez
Para tener paralelismo necesitas la misma cantidad de recursos como de procesos
quieres realizar en paralelo
Si tengo paralelismo siempre tengo concurrencia pero no al revés

Los procesos son caros porque son ejecutados por los cores directamente
Los hilos también pero dependen de un hilo padre que se puede dividir en un montón de
hilos

Todo lo que tiene que ver con input/output tiene que ver con hilos (teclear, no hay un core
para cada tecla, se van cogiendo a través de hilos) (puntitos en la pantalla, tráfico de
internet…
Todo lo que tiene que ver con compute →cores (sumar dividir fib renderizar o ejecutar un
programa) computación pura y dura

Pregunta: dime si es concurrente con hilos o paralelismo (con x recursos): la pista es ver:
● si está implicado a operaciones input/output → threading/hilos
● si está relacionada con tipos compute es paralelo

Los hilos son baratos porque al instalarse solo requieres de una instrucción y son hijos de
un mismo proceso y no tienen que pedir permiso a nadie, nacen de forma instantánea y ya
tienen una función predefinida.
Los cores necesitan solicitar un cambio de contexto, calcular la memoria que necesita ese
contexto… por eso son más caros

Definición informal: Todo el mundo escucha todos los hilos comparten espacio en memoria,
si necesitas decir algo a un hilo en concreto no lo puedes decir a todos porque pierdes
efectividad, necesitas reservar un propio espacio en memoria para hacerlo en privado pero
es más caro
“El grito es más rápido pero no tienes el control de todo, todo el mundo lo escucha”

Pregunta: ¿Cuantos procesos puedes controlar de forma paralela en tu ordenador?: Los


mismos que el número de cores que tiene el ordenador

Pregunta: Se supone que no sabemos usar multicore, ejecutamos la función y debería


ejecutarse con un core pero en algunos casos en la foto hay más de 1 core en la foto que se
estresa: Por el tema de hyperthreading el mismo core se divide en 2 y te sale que se están
estresando 2 que son solo 1 mismo físico

Pregunta: Cuantos hilos está usando el JupyterLab: 6 cuando se ejecuta desde jupyterlab, 1
cuando se ejecuta desde consola porque se ejecuta de manera secuencial pero en
jupyterlab no

“Un hilo no puede vivir si no es hijo de un proceso”

Hilo demonio: Es un hilo que está en Java y en otros lenguajes(en lenguajes como C no
está) que se encarga de controlar cosas, en java va eliminando datos basura que vamos
dejando para que no se acabe la memoria disponible

Pregunta: Cuantos hilos podemos instanciar: Casi infinitos, están limitados a la cantidad de
recursos (memoria RAM) que tengamos en el ordenador
Pregunta: Cuantos procesos podemos instanciar: Los procesadores no pueden parar, tienen
una frecuencia que respetar, en función de la versión de python
Los procesos dependen de los cores, para ver cuantos puedes instanciar tienes que utilizar
la extensión poo executor que crea un poo executor

Qué es SSH: Secure Shell


Target: Desde donde te estás conectando
Prueba de solicitudes servidor
**Pregunta de examen:
response: 200 → okay
response: 429 → too many requests
(al cabo de un tiempo)
response: 200 → okay
Justificación: las característica de la concurrencia: puede ejecutar errores transitorios no
controlables, como se están enlazando los hilos a esa velocidad existen errores. Te está
informando de forma errónea y no es reproducible, existen errores transitorios.
(errores transitorios no reproducibles)

Ejemplo de error: Si tienes un array con archivos más pesados y lo recorres con un for, vas
a tener un problema porque hay algunos que no se van a descargar
APUNTES CANVAS
TEMA 1- Introducción a la programación concurrente
El CPU (Core Processor Unit) no es único ni fijo actualmente, puede ejecutar varias tareas a
la vez
Concurrencia:
Un programa secuencial es un programa que ejecuta instrucciones una tras otra
Un programa concurrente está formado por 2 o mas programas secuenciales que se
ejecutan concurrentemente (a la vez)
Ejemplo: (P1 y P2 son 2 programas diferentes)

En el caso 1 tenemos un paralelismo que siempre va a ser concurrente, necesitaremos


tantos cores como programas queramos ejecutar
En el caso 2 tenemos una ejecución pseudo paralela o paralelismo simulado, tenemos más
procesos que procesadores por lo que se repartirán el trabajo entre ellos.

Podemos tener paralelismo en 3 sistemas físicos distintos:


● Sistemas multiprocesadores:Memoria común entre todos los procesadores y cada
uno puede tener memoria local
● Sistemas distribuidos: No tienen memoria común, cada uno memoria local
● Sistemas de tiempo compartido

Ventajas de la programación concurrente


● Mejora la velocidad de ejecución, no disponemos de programación paralela
(mismo número de procesadores y de procesos) y podemos mejorar el tiempo de
respuesta (que puede llegar a ser crítico en algunos casos)
● Mejoras frente a la ejecución secuencial: Realizar cálculos de forma más rápida,
aplicaciones con interfaz gráfica, simulaciones que no pueden realizarse de forma
secuencial
Condiciones de Bernstein: Def: Conjunto de sentencias que nos indican si 2 sentencias se
pueden ejecutar concurrentemente sin tener en cuenta la sincronización. Para hacer esto
definimos 2 conjuntos (escritura y lectura):
-Conjunto de lectura R(sentencia): Son las variables que se van a leer en la sentencia
-Conjunto de escritura W(sentencia): Son las variables que se van a modificar en la
sentencia
Condiciones:
1. Las variables que se leen en la secuencia 1 y las variables que se modifican en la
secuencia 2 no son las mismas
2. Las variables que se modifican en la secuencia 1 y las variables que se leen en la
secuencia 2 no son las mismas
3. El conjunto de escritura de las 2 secuencias no tiene variables en común
Maneras de representar la concurrencia:(No creo que lo pregunte)
Grafos de precedencia: Mediante flechas y nodos se indica que se va a ejecutar cuando el
proceso anterior ha terminado (P1) → (P2)
Sentencias fork y join:
Las sentencias fork se ejecutan concurrentemente a las sentencias que van después
de ella
Las sentencias join se paran hasta que termine la sentencia que las invoca

Corrutina: Es una rutina que en un momento guarda el entorno de control y le pasa el


trabajo a otra rutina

Características de los sistemas concurrentes


En paralelismo, el resultado no depende de la velocidad de ejecución y siempre va a ser
igual
En concurrencia, no se pueden replicar los errores y el resultado depende de la velocidad
de ejecución.
Se pueden producir errores transitorios dependiendo de la ejecución y son difíciles
de detectar
“Repetidas ejecuciones sobre un mismo conjunto producen diferentes resultados”
Problemas de la programación concurrente
Un programa secuencial es correcto cuando al terminar produce el resultado esperado, un
programa concurrente no tiene por qué terminar por lo que se tienen que tener en cuenta
ciertas codiciones de seguridad y vivacidad para decir que es correcto
● Condiciones de seguridad: Las operaciones críticas se hacen de manera invisible y
todo se sincroniza de manera correcta intercambiando información
● Condiciones de vivacidad:
○ (No Deadlock)Los procesos no se pueden parar por falta de vivacidad
(recursos), (se puede parar parte parcial o total del sistema)
○ (No Livelock): El sistema se queda realizando operaciones inútiles o no
constructivas
TEMA 2 - PROCESOS E HILOS
Proceso: Def: Unidad básica de trabajo dentro de un sistema operativo, encargado de
ejecutar procesos brindándole los recursos necesarios
Hay 2 aspectos diferenciados: ejecución y posesión de recursos.
Un proceso se puede observar como una o más unidades de ejecución, denominadas hilos.
También podemos denominar a los hilos como procesos ligeros.

Decimos que un proceso pasa a estado activo cuando un hilo toma posesión del
procesador.

Aplicación: Este tipo de procesos se puede aplicar en programación paralela para


separación de tareas, modularidad y en servidores de información.

Multihilo: El sistema operativo mantiene varios hilos de ejecución dentro de un mismo


proceso

Hilos.
● Estado de ejecución (ejecución, listo, etc.).
● Contexto del procesador, que se salva cuando no está ejecutando.
● Tiene una pila de ejecución.
● Almacenamiento estático para variables locales.
● Acceso a memoria y otros recursos del proceso, compartidos con todos los hilos del
mismo
Estados de un hilo.
Los estados de ejecución de un hilo pueden sincronizarse entre ellos. Las operaciones
relacionadas con los cambios de estado de los hilos son creación, bloqueo, desbloqueo y
terminación.
Cuando un proceso se suspende, todos sus hilos son suspendidos, ya que comparten el
mismo espacio de direcciones. Y cuando un proceso termina, todos sus hilos terminan.

Niveles de uso de los hilos.

Hilos a nivel de usuario.


La aplicación realiza todo el trabajo de la gestión de hilos.
La biblioteca de hilos es la zona en la que los hilos se pueden:
● Crear o destruir.
● Intercambiar información entre hilos.
● Planificar la ejecución de los mismos.
● Salvar y restaurar el contexto de los mismos.

Hilos a nivel del núcleo


El núcleo mantiene la información del contexto del proceso y de los hilos, Los hilos son
visibles por el núcleo.
La planificación se realiza al nivel de los hilos. Los hilos del mismo o distinto proceso
compiten por el procesador.
Combinación de los niveles
● La creación de hilos se da en el espacio de usuario.
● La planificación y sincronización se da en el espacio de usuario.
● Varios hilos de usuario se asocian con varios hilos a nivel de núcleo.
● Ventajas:
○ Los hilos de un mismo proceso se pueden ejecutar en paralelo en varios
procesadores.
○ Las llamadas al sistema bloqueantes no necesitan bloquear todo el proceso.
TEMA 3 - CONCEPTOS BÁSICOS DE LA PROGRAMACIÓN CONCURRENTE

● Abstracción: capacidad de aislar y encapsular la información del diseño y la


ejecución. Podemos encontrar como lenguajes de abstracción: sistema operativo, el
circuito integrado, electromagnetismo, etc. El ENCAPSULAMIENTO es la principal
abstracción que nos permite desarrollar y describir sistemas complejos. Además,
también nos permite probar y predecir características del software que
desarrollamos.
● Interfoliación: para entenderlo de una manera sencilla, esto significa mezclar.
○ Contención: dos procesos o más acceden al mismo recurso o deben acceder
a la misma información.
○ Comunicación: dos procesos o más deben comunicarse entre sí para
intercambiar algún tipo de información. Esto nos permite la sincronización.
● Atomicidad: aquellas instrucciones cuya ejecución no puede ser interfoliada.
● Corrección: con esto queremos indicar si las soluciones propuestas cumplen con
los criterios de satisfacción del problema a resolver. En el caso de los algoritmos,
nos tenemos que fijar en que cumplan unas sentencias iniciales, denominadas
invariantes.
● Seguridad: un sistema es correcto cuando:
○ Exclusión mútua: imposibilidad de cohabitar en la misma zona. Podemos
entender por exclusión mutua un cruce de carreteras, donde el propio cruce
es la zona donde no pueden existir dos vehículos al mismo tiempo, ya que si
no colisionarían.
○ Interbloqueo: bloqueo permanente de (y debido a) un conjunto de procesos
que compiten por algún recurso compartido o se comunican entre ellos.
Podemos entender por interbloqueo cuando dos personas coinciden para
pasar por una puerta y ninguna de las dos se pone de acuerdo para entrar.
○ Inanición: insuficiencia prolongada de alimentación. Ejemplo: Cuando en tres
procesos, dos se alían para que el tercero no participe nunca, cojiendo ellos
el uso de su recurso.
● Vivacidad: propiedades que deben cumplirse eventualmente.
● Equidad: propiedad que tiene que ver con el reparto de recursos.
Apuntes GitHub
Git es una herramienta con sistema de control de versiones, permite checkpoints (commits),
capaz de trabajar en diferentes ramas (branches) que se pueden sincronizar (merge)

Archivos que ignora Git [nombre].gitignore → Datos personales que no se suben a Git

Comandos importantes
git clone <url> //clonar repo

git init (con esto creamos el repo en local)

git status (vemos el estado del repo, que archivos están ready para subir, en verde, y cuales
no estan ready para ser subidos, en rojo.)

git commit -m "mensaje" (Breve descripción de lo que queremos subir.)

git add . (Para subir todas las carpetas. Si queremos un archivo en específico, en lugar del
punto ponemos el nombre de la carpeta.)

git push (Para subir todo al repo. Seguir los pasos que salen en la pantalla para generar el
repo.)

git pull (Para actualizar el repo, es decir, bajar todo lo que tengamos en el repo.)

Guardar cambios
git add .
git commit -m “nombre del commit”
git push -u origin main

Cambiar de branch: git switch -c <> | git branch -D <> | git checkout -b <>

Mergera dos branches git merge <branch>


Preguntas del año pasado:
1. Q.- ¿Que quedan haciendo los hilos que no se encuentran en su estado
crítico?
A.- Todos los hilos que no se encuentran en su estado crítico se dedican a
esperar hasta que llegue su turno.
============================================================
===
2. Q.- ¿Que pasa si entran dos clientes a la vez si ya han sido atendidos 24 de
ellos?
A.- No seria posible que llegase a pasar esa acción ya que solo hay
estrictamente 25, como hay un identificador de “atendido”, una vez está
un cliente atendido es imposible atenderle otra vez
============================================================
===
3. Q.-¿Cuál es la diferencia entre sección crítica y función monitorear?
A.-La sección crítica no es el recurso, sino una forma de ordenar,
monitorear
es para ver si el “cliente” o hilo ha pasado por la sección crítica o no.
============================================================
===
4. Q.- ¿Qué pasa si uno de los clientes no decide esperar la cola y quiere irse?
A.- No estaría contemplado el caso de que uno de los clientes se fuera,
entraríamos en un proceso cíclico infinito. (no llegaríamos a ninguna
solución.
============================================================
===

Q.- ¿Cuándo y cómo se asignan los tickets a los clientes?


A.- Se asignan al nacimiento, es decir, cuando se declaran. Se asignan de
forma casi instantánea para el ojo humano.

============================================================
===
5. Q.- ¿Los usos de Time.Sleep(delay) son exclusivamente para simular que
está cocinándose el pan o tiene un uso práctico real?
A.- Es para dar feedback al usuario de que está haciendo algo, no tiene
utilidad práctica real.

También podría gustarte