¿Cómo funciona Node.js detrás de escena?

Node.js es el entorno de tiempo de ejecución de JavaScript que se basa en el motor V8 de Google, es decir, con la ayuda de Node.js podemos ejecutar JavaScript fuera del navegador. Otras cosas que puede o no haber leído sobre Node.js es que es de subproceso único, basado en una arquitectura basada en eventos y sin bloqueo basado en el modelo de E/S.

1) Arquitectura Node.js: Node.js está hecho del motor Chrome V8 que está escrito en C++ y Libuv , que es una biblioteca C multiplataforma que brinda soporte para eventos basados ​​en E/S asíncrona en bucles de eventos y bucles de subprocesos. No se preocupe, se explica en esto más adelante al final. Una cosa importante que debemos recordar es que, aunque Node.js está hecho con el motor V8 y Libuv, que están escritos en C o C++, aún podemos usar Node.js en JavaScript puro.

2) Aplicación Node.js: ahora que hemos aprendido sobre la arquitectura Node.js, es hora de aprender cómo se ejecuta una aplicación Node.js y esta parte incluye el concepto de Node.js como un solo subproceso y no bloqueando la naturaleza también. Entonces, antes que nada, ¿qué es un hilo? Un subproceso en términos simples es básicamente un conjunto de instrucciones de programación que se pueden ejecutar de forma independiente en el procesador de una computadora y cada proceso que queremos ejecutar tiene su propio subproceso para ejecutar las instrucciones de programación y el proceso puede tener más de un subproceso. Pero, el punto a recordar es que la aplicación Node.js se ejecuta solo en un solo subproceso y, por eso, significa que si esa aplicación Node.js está siendo utilizada por 5 usuarios o 5 millones de usuarios, solo se ejecutará en un solo subproceso.lo que hace que la aplicación Node.js sea bloqueable (lo que significa que una sola línea de código puede bloquear toda la aplicación porque se está utilizando un solo hilo). Por lo tanto, para mantener la aplicación Node.js en ejecución, se debe usar código asíncrono en todas partes que tengan funciones de devolución de llamada porque, como sabemos, el código asíncrono continúa ejecutándose en segundo plano y la devolución de llamada se ejecuta tan pronto como se resuelve la promesa en lugar del código síncrono que bloquea toda la aplicación hasta que termina de ejecutarse. Sin embargo, aún podemos usar el código síncrono en algún lugar de nuestra aplicación y ese lugar es antes de que nuestra aplicación ingrese al bucle de eventos.. Event-loop es lo que permite que las aplicaciones Node.js ejecuten operaciones basadas en E/S asíncronas sin bloqueo, es decir, todo el código asíncrono se administra y ejecuta dentro del event-loop y antes de eso, podemos usar nuestro código síncrono que está en este caso conocido como código de nivel superior . Entonces, intente escribir código síncrono solo para aquellas operaciones que se ejecutan solo una vez al inicio de nuestra aplicación y no todas las veces, por ejemplo: leer algunos datos de la memoria de su computadora que luego puede solicitar algún usuario (muchas veces) en código asíncrono.

La siguiente figura es la visualización del gráfico :

Entonces, como puede ver cada vez que la aplicación Node.js se inicia en un hilo, el primer paso es inicializar la aplicación y ejecutar el código de nivel superior que, como hemos dicho anteriormente, es el único código síncrono que deberíamos tener en nuestra aplicación. . El siguiente paso es requerir los módulos que especificamos en nuestro código (que normalmente está escrito en la parte superior).

El siguiente paso es registrar todas las devoluciones de llamada de eventos que se encuentran en nuestro código, que luego se enviarán al bucle de eventos para su ejecución, donde se ejecuta la mayor parte de nuestro código en la aplicación de Node. Pero algunas veces, algunas tareas son demasiado pesadas para ser ejecutadas en nuestro bucle de eventos por un solo subproceso, por lo que esas tareas se envían al grupo de subprocesos (proporcionado por Libuv) son los 4 subprocesos adicionales para ejecutar tareas más pesadas sin bloquear el subproceso principal . La cantidad de subprocesos se puede aumentar y el usuario no tiene que especificar las tareas que deben descargarse porque event-loop lo hace todo solo, pero podemos especificar la cantidad de subprocesos.

3) El bucle de eventos: por lo tanto, debe recordar este punto de que el bucle de eventos es el lugar donde se ejecuta todo nuestro código asíncrono. Por un momento, ¿por qué no revisa el primer párrafo y lo lee nuevamente? Cubriremos el tercer punto de Node.js, que es que se basa en una arquitectura basada en eventos. La idea detrás del bucle de eventos es que funciona en esta arquitectura o en estos tres pasos, como se muestra a continuación:

  1. Se emiten eventos. Estos eventos pueden emitirse desde cualquier función asíncrona, como obtener una solicitud HTTP, el módulo del sistema de archivos terminó de leer el archivo o finalizó un temporizador. Estos eventos pueden variar en nuestro código.
  2. Después de eso, Event-loop los recoge.
  3. Las funciones de devolución de llamada se ejecutan (según su código).

Aparte de esto, event-loop descarga tareas más pesadas al grupo de subprocesos.

Nota: Event-loop sigue una secuencia para ejecutar las devoluciones de llamada.

Por lo general, un bucle de eventos tiene 4 fases y para cada fase, establece una cola de devolución de llamada que contiene funciones de devolución de llamada del evento emitido.

  1. La primera fase son las devoluciones de llamada de tiempo de espera expirado , que son las funciones de devolución de llamada de la función setTimeout(), etc.
  2. La segunda fase son las devoluciones de llamada del sondeo de E/S como un evento de lectura de un archivo o cualquier solicitud HTTP.
  3. La tercera fase son las devoluciones de llamada de la función setImmediate() , que son las funciones de devolución de llamada que el usuario desea ejecutar justo después del sondeo de E/S. Este tipo de funciones pueden ser específicas para algunos solo en ciertos casos.
  4. Y el último es Cerrar las devoluciones de llamada que se emiten a partir de eventos como el cierre del servidor web, etc.

Nota: Todas las devoluciones de llamada disponibles de una determinada fase se ejecutan primero y solo luego pasan a la siguiente fase. Además, al final del bucle de eventos, comprueba si todavía hay algún otro evento en curso y, si es así, vuelve a la primera fase y así sucesivamente, de lo contrario, el programa sale del bucle de eventos.

Publicación traducida automáticamente

Artículo escrito por sarthakduggal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *