Una de las grandes bondades de Node es el Event Loop, el proceso que se encarga de recibir las peticiones, meterlas en una cola para su ejecución, mantener el control de los callbacks y despacharlas, esto ocupando un solo thread, de una manera muy eficiente.

El mejor ejemplo que he utilizado para explicar el event loop y la programación asíncrona, es el siguiente código:

console.log('Iniciando app');


setTimeout(() => {
console.log('Primer callback');
}, 2000);


setTimeout(() => {
console.log('Segundo callback');
}, 1000);


console.log('Fin');


En el código vemos 4 instrucciones, un log al iniciar la app, un log que se imprime después de dos segundos, otro log que se imprime después de un segundo y por último otro log final.

En la programación que estamos acostumbrados a utilizar el orden de la impresión de logs sería la siguiente:

Iniciando app
Primer callback (después de esperar 2 segundos)
Segundo callback (después de esperar 1 segundo)
Fin

Pero en Node el eventloop se va encargando de ir despachando los eventos que vayan terminando, por lo que la salida del log sería

Iniciando app
Fin
Segundo callback
Primer callback

Otro punto importante es que en una aplicación tradicional el tiempo completo de ejecución hubiera sido de 3.x segundos mientras que con Node.js el tiempo sería de 2.x segundos al ejecutarlo.

Tal como mencionabamos las aplicanciones Node se ejecutan sobre un único thread, en ese thread el Event Loop que es manejado por una librería llamada Libuv, crea por default un thread pool con 4 threads para manejar el trabajo asíncrono, pero los sistemas operativos proveen interfaces asíncronas para varios tipos de tareas de I/O, entonces cuando es posible utiliza esas interfaces para no usar el thread pool. El event loop es un proceso formado por un conjunto de fases con tareas especificas que son ejecutadas usando round-robin.



En este video, Bert Belder explica muy bien como funciona el Event Loop y todo lo que tenemos que saber al respecto



Más información
Compartir:

Erwin Lobos

Deja tu comentario:

3 comments so far,Add yours