Andrés Soret Chacin
Para poder entender lo que es programación síncrona y asíncrona en JavaScript, primero vamos a hablar de cómo funciona JavaScript Engine en el navegador.
Conceptos que debes de tener en cuenta:
- Memory heap: Es el espacio en donde se van a guardar todas las variables, todas las funciones y objetos que creamos o construimos en JavaScript, y se van a estar guardando en el memory heap de forma aleatoria.
- Call Stack: Es la pila donde se van a empezar a llamar cada una de las funciones que tenemos que ejecutar en nuestro programa. Por ejemplo, yo tengo esta función
console.log("Hola Mundo"), y esa función manda a llamar esta otra funciónconsole.log("Mi nombre es Diego"). Este Call Stack lo que va a hacer es mandar a llamar la primera función, ejecuta"Hola Mundo", y se manda a llamar la segunda función, ejecuta"Mi nombre es Diego".
A esta función se le conoce como programación síncrona. Quiere decir que se está trabajando una tarea a la vez. JavaScript funciona trabajando una tarea a la vez, y eso va a estar funcionando prácticamente en el Call Stack.
Stack Overflow
No, no es esa página famosa entre los desarrolladores. Se refiere a cuando llevamos nuestro stack de tareas a un punto en donde excede el número o la memoria que tiene permitida para poder ejecutar las tareas.
Lo que sucede con esto es que prácticamente nuestro navegador deja de funcionar, crashea. Tenemos que cerrarlo, abrirlo, para que vuelva a liberar la memoria que tenía en este stack y pueda funcionar de la forma en la que nosotros esperamos.
Prgramación Asíncrona
JavaScript por defecto solo funciona de forma síncrona. Pero sí tenemos forma de poder hacer que JavaScript pueda empezar a trabajar ciertas tareas de forma asíncrona, que quiere decir en simultáneo.
Pero antes de hacerlo, debes de entender bien cómo funciona un poco más el tema del navegador con ciertos factores muy importantes.
- Lo primero que tenemos es el Call Stack.
- Lo segundo que tenemos la parte de las Web APIs. Las Web APIs es lo que va a hacer que JavaScript pueda funcionar o se comporte de manera asíncrona. Al momento de que nosotros tenemos una función que es una Web API, lo que hace es que la va a mandar a la sección de Web API y va a hacer que se ejecute en simultáneo mientras que el Call Stack sigue sacando las funciones que tiene ahí.
- La Web API lo que va a hacer es que se va resolver en ese momento, ya que termine de resolverse, lo que tenga que hacer en la función, lo va a bajar al Queue, que es prácticamente una sala de espera.
- Y ya por último, el Event loop va a estar verificando que el Call Stack esté vacío. Si el Call Stack ya está vacío, va a tomar lo que existe en el Queue y lo va a regresar al Call Stack para que se pueda terminar de ejecutar. Si no está vacío, va a mantener lo que está en el Queue en espera hasta que se logre liberar el Call Stack y en ese momento le va a dar paso para que la función que se tiene que terminar de ejecutar pueda pasar al Call Stack y en ese momento se termine de ejecutar todo nuestro programa.
Esta es la forma en la cual nosotros trabajamos código en JavaScript de forma síncrona y de forma asíncrona, utilizando por ejemplo Web APIs, que hace que nuestro código pueda comportarse como código asíncrono. Y para esto vamos a utilizar lo que se llaman promesas. Promesas que también pueden ser Async and Await, que van a hacer que nuestro código pueda tener este comportamiento de asíncrono para que se ejecute en paralelo.
Eugenia Maldonado
Excelente aporte