JavaScript es un lenguaje; el runtime es el entorno que lo ejecuta y añade capacidades como temporizadores, red, archivos, consola o DOM.
Texto
JavaScript
├─ sintaxis y valores
├─ funciones, objetos y promesas
└─ reglas de ejecución
Runtime
├─ motor de JavaScript
├─ Event Loop
├─ APIs del entorno
└─ colas y mecanismos de comunicación
Concurrencia: varias operaciones progresan durante un mismo periodo.
Paralelismo: varias operaciones ejecutan trabajo al mismo tiempo en recursos distintos.
El hilo principal del navegador coordina concurrencia mediante el Event Loop. Algunas tareas pueden realizarse fuera de ese hilo por el navegador, el sistema operativo, workers o servicios externos.
Declarar una función async no mueve heavySynchronousWork a otro hilo. El trabajo síncrono se ejecuta normalmente hasta alcanzar un await que realmente suspenda la continuación.
1. JavaScript ejecuta el trabajo actual.
2. El entorno realiza o espera otras operaciones.
3. Cuando existe una continuación lista, se encola.
4. El Event Loop decide cuándo puede ejecutarse.
5. La callback entra nuevamente al Call Stack.
¿Por qué una función async todavía puede bloquear la interfaz?
Respuesta
Porque el código síncrono de la función se ejecuta en el hilo actual. async cambia el contrato de retorno y permite usar await, pero no traslada automáticamente cálculos pesados a otro hilo.