Instructor @Fictizia 🤖
Adalab fan and mentor 🙆♀️
💜 FOSS Contributor and advocate 🥑
🔥 🌪 Software Eng. @Devo
💚 Node Girls Madrid Lead
💃🏻 Embajadora de los Guilds
y Org. @Open Source Weekends
@KoolTheba
Para amar algo, hay que comprenderlo antes...
Asincronía: se refiere a la existencia de eventos independientes del flujo principal del programa y a las formas de gestionar esos eventos.
La evolución de las aplicaciones, necesidades de usuario y escalabilidad hace que nazcan modelos que gestionen muchas acciones y peticiones
En el Frontend
Más usos
Llamada asíncrona procedural - Sistemas Operativos
Asynchronous Javascript XML - aplicaciones web
Asynchronous method dispatch - servidor
Procesando...
by RisingStack
fetch('/data')
.then(res => res.json())
.then(console.log)
.catch(err => throw err)
const express = require('express');
const {readFileSync} = require('fs')
const app = express();
app.get('/data', (req, res) => {
const content = readFileSync("./my_data.json")
res.json(content);
});
app.listen(3000, () => {
console.log('Server on port 3000!');
});
CPU
Computaciones numéricas, lógicas... | Leer/escribir en el sistema de ficheros |
---|---|
Análisis datos en memoria | Acceso a cámara, micrófonos y otros... |
Simulaciones | Leer/escribir a/desde tarjeta de red (Wifi/cable...) |
Leer desde el stdin (consola...) |
Input/Output
By LemonCode
Síncronas/ Secuenciales
Asíncronas
⚠️ ⚠️ Bound === Limitaciones o Cuellos de botella
Programa:
No es algo vivo hasta que se ejecuta, y se ejecuta en procesos.
Es sencillamente un conjunto de estructuras de datos y código.
Proceso: 🏃🏻♀️🏃🏻♀️
Unidad mínima de ejecución de un SO (instancia de un programa en ejecución). a.k.a. Tareas (o Jobs)
Tiene un flujo de control que ejecuta una instrucción tras otra.
Puede tener 1 o varios hilos de ejecución.
2 instancias de ejecución [procesos] de un programa de edición de texto (p.ej. Word...) con dos estados diferentes
Fase de espera: a que el sistema esté listo, los datos estén disponibles o que la operación se complete
Fase de ejecución: respuesta/siguiente acción con los datos recibidos
Es la unidad o la tarea por defecto de uso de la CPU
y de ejecución de un proceso
Proceso == programa + el estado de la ejecución de los hilos
👉 Aquí entra la concurrencia! 👈
Si tienes tareas de input/output y quieres programarlos para que den los resultados correctos, lo que estás tratando de hacer es resolver un problema de concurrencia
Es esencial en la programación moderna:
Concurrencia: habilidad de distintas partes de un programa de ser ejecutado en desorden o en orden parcial, sin afectar el resultado final.
A nivel de lenguajes de programación:
A nivel del Sistema Operativo:
- Condición de carrera (race condition)
- Interleaving - intercalado
- Nudos (locks)
- Queues
- Thread Pool
- Espera (Waiting)
- Exclusión (Mutex)
***
- Polling (mecanismo de sondeo - async I/O)
- Interrupts (async I/O)
En el caso de hilos, al compartir el mismo entorno del proceso, dirección y datos, pueden darse conflictos y hay que solucionarlo
Exclusión mutua o Mutex: el acceso (a datos p.e.) se le concede a sólo a un hilo por turno.
Se evita que entre más de un hilo a la vez en una sección crítica
Espera: se especifica a qué esperan antes de proceder. Se le notifica explícitamente cuándo proceder.
👇 Ambos son mecanismos de sincronización 👇
Chequear el dispositivo (idle/waiting - fase de espera):
Bloqueante: esperas hasta que el dispositivo esté listo, thread bloqueado
No-bloqueante: devuelve el control - p.ej. con un polling sondea constante y periódicamente hasta que esté listo y entonces…
Hacer operaciones I/O consiste en 2 pasos:
Síncronamente: ejecutando la operación (p.ej. escribir o leer) iniciada por el programa hasta que se completa
Asíncronamente: la finalización de la operación se notifica al programa (con una promesa, p.ej.) y la respuesta de gestionará más tarde
by Lemoncode
Sincrono
Asíncrono
by Lemoncode
by Lemoncode
Browser inside:
Sistema Operativo
Hardware
La petición devuelve inmediatamente el control para evitar el bloqueo del hilo de ejecución
fetch('/data')
.then(res => res.json())
.then(console.log)
.catch(err => throw err)
Explórate. Aprende.
Escucha al mundo.
Y vuelve a aprender.
Asincronía: se refiere a la existencia de eventos independientes del flujo principal del programa y a las formas de gestionar esos eventos.
Una forma clásica de gestionar la asincronía en un programa es con subrutinas (métodos, funciones) que retornan al origen de la llamada un objeto, generalmente llamado futuro o promesa, que representa los eventos que están sucediendo.
Llamada asíncrona procedural - Sistemas Operativos
Asynchronous Javascript XML - aplicaciones web
Asynchronous method dispatch - servidor
Server
Añadir la parte del Browser como aplicación y de cómo se gestiona con el SO
By LemonCode
Ops Síncronas/ Sec
Ops Asíncronas
⚠️ ⚠️ Bound === Limitaciones o Cuellos de botella
Programa:
No es algo vivo hasta que se ejecuta, y se ejecuta en procesos.
Su lógica se puede ejecutar en secuencial o en paralelo.
Es sencillamente un conjunto de estructuras de datos y código.
Proceso:
Unidad mínima de ejecución de un SO (instance of an executing program). a.k.a. Tasks o Jobs
Tiene un flujo de control que ejecuta una instrucción tras otra.
Es el código que ejecuta al programa + conjunto de registros + contador de programa con instrucciones + pila o stack
Puede tener 1 o varios hilos de ejecución.
2 instancias de ejecución de un programa de edición de texto
(p.ej. Word...) con dos estados diferentes
Estados:
Check out this video: https://classroom.udacity.com/courses/ud923/lessons/3065538763/concepts/34341886380923
- One-to-One model
- Many-to-One model
- Many-to-Many model
Proceso mono-hilo
Proceso multi-hilo
Process Control Block
Al ejecutarse, se crea(n) un hilo de ejecución que cruza el código y datos del programa haciendo uso de ello
By Udacity
Programas = Browser
Hilo = llamada al Servidor 📫
Hilo = pintar la UI 🧑🎨
Concurrencia: que los hilos se ejecuten en un mismo entorno
Concurrencia se refiere a la habilidad de distintas partes de un programa, algoritmo, o problema de ser ejecutado en desorden o en orden parcial, sin afectar el resultado final
En el caso de hilos, al compartir el mismo entorno del proceso, dirección y datos, pueden darse conflictos y hay que solucionarlo
Exclusión mutua o Mutex: el acceso (a datos p.e.) se le concede a sólo a un hilo por turno.
Se evita que entre más de un hilo a la vez en una sección crítica
Espera: se especifica a qué esperan antes de proceder. Se le notifica explícitamente cuándo proceder.
👇 Ambos son mecanismos de sincronización 👇
Concurrencia:
2 ó más procesos, hilos, etc, suceden progresivamente
No implica que sucedan al mismo tiempo
Técnica: las tareas se descomponen y entrelazan mientras comparten recursos
Paralelismo:
Técnica concurrente en la que 2 ó más procesos, hilos, etc se ejecutan a la vez
'Hijo de la concurrencia'
No se comparten recursos
👇
Fase de espera: a que el sistema esté listo, los datos estén disponibles o que la operación se complete
Fase de ejecución: respuesta/siguiente acción con los datos recibidos
Con respecto a cómo la fase de espera afecta a nuestro programa:
Bloqueante: llamada/operación que no devuelve el control a nuestra aplicación hasta que no ha terminado y el thread queda bloqueado en estado de espera.
No-bloqueante: devuelve el control indep. de si ha terminado.
Si se completa: devuelve los datos,
Si no se completa: devuelve un mensaje de error
Asincronía: se refiere a la existencia de eventos independientes del flujo principal del programa y a las formas de gestionar esos eventos.
Una forma clásica de gestionar la asincronía en un programa es con subrutinas (métodos, funciones) que retornan al origen de la llamada un objeto, generalmente llamado futuro o promesa, que representa los eventos que están sucediendo.
Sincronía: operación I/O que se produce de forma secuencial. Esperamos a que termine para procesar el resultado.
Se le considera bloqueante.
Asincronía: la finalización de la op. se señaliza 'más tarde', con un callback, promesa o evento.
Ayuda a que la respuesta sea gestionada 'en diferido'.
Devuelve el control inmediatamente, por lo que se le considera 'no-bloqueante'.
Processing...
Origen:
Interacción con usuario web, ejecución en browsers y peticiones de datos a servidor