NodeJS, la vida de los procesos.

fernandochata

Fernando Chata

Posted on August 2, 2020

NodeJS, la vida de los procesos.

Desde hace poco he comenzado a estudiar node, y a veces mientras hacia pruebas con el fetch api, el código no seguía el orden que en mi cabeza debía seguir. Además de dejarme con algo de insomnio comencé a leer a qué se debía.

Veamos, si ves el siguiente código:

console.log('program start');
setTimeout(function() { console.log('first function') }, 3000);
setTimeout(function() { console.log('second function'); }, 2000);
setTimeout(function() { console.log('third function'); }, 1000);
console.log('program end');
Enter fullscreen mode Exit fullscreen mode

Y, si no sabes como funciona el setTimeout() podrías suponer un recorrido línea por línea, y esperar una salida por consola como esta:

// program start
// first function
// second function
// third function
// program end
Enter fullscreen mode Exit fullscreen mode

claro, si te digo que el setTimeout() le pone un temporizador a una función (setTimeout(<función>,<tiempo en milisegundos>), es decir ejecuta la función después de determinados milisegundos), entonces quizá pienses que obtendrás algo como esto:

// program start
// third function
// second function
// first function
// program end
Enter fullscreen mode Exit fullscreen mode

Pues te vas a quedar sentado, pues la salida por consola es:

// program start
// program end   <--- Ojo, ojito, ojete
// third function
// second function
// first function
Enter fullscreen mode Exit fullscreen mode

pikachu
Pero cómo? resulta que javascript hace lo siguiente:

console.log('program start');
Enter fullscreen mode Exit fullscreen mode

esto lo toma y lo ejecuta, es decir te muestra por consola el mensaje, y pasa a la siguiente línea de código.

setTimeout(function() { console.log('first function') }, 3000);
Enter fullscreen mode Exit fullscreen mode

acá se detiene y ve una función, la que podría o no demorarse, entonces la deja en una cola, para que se vaya ejecutando en segundo plano, y pasa a la siguiente línea de código.

setTimeout(function() { console.log('second function'); }, 2000);
Enter fullscreen mode Exit fullscreen mode

acá vuelve a encontrarse con otra función y hace lo mismo, a la cola que tengo prisa, y sigue con la siguiente línea

setTimeout(function() { console.log('third function'); }, 1000);
Enter fullscreen mode Exit fullscreen mode

se repite el proceso y pasa de la función y continua

console.log('program end');
Enter fullscreen mode Exit fullscreen mode

acá encuentra algo que puede hacer e imprime por consola el mensaje, y encuentra el final del archivo.

Mientras hacía todo esto, las funciones en cola siguieron ejecutándose y si llegaban a su final, pasaban a su vez a otra cola, de salida digamos.

Javascript revisa la cola de salida y nos muestra los resultados de las funciones que se ejecutaron, todo en orden, revisa luego si queda algo en la cola donde se encontraban las funciones y si no queda nada, pasa a revisar nuevamente la cola de salida, si no encuentra nada pues termina su trabajo.

Todo esto es por optimizar el tiempo de ejecución, pues si esperara hasta que cada función se ejecute para seguir a la siguiente, como el ejemplo, se demoraría en total 6 segundos, versus los 3 segundos que realmente se demora.

Esto toma relevancia al usar funciones promesa, que no se tiene certeza de cuanto demorará en llegar la respuesta.

Eso, bueno no soy experto así que si algo está mal o quieres acotar algo, pues tienes los comentarios y gustoso modifico.

Más información acá la encuentras

💖 💪 🙅 🚩
fernandochata
Fernando Chata

Posted on August 2, 2020

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related