Node.js es un entorno de tiempo de ejecución de JavaScript multiplataformaque ayuda a ejecutar e implementar programas del lado del servidor. Se supone que el Node evita el código de bloqueo mediante el uso de un bucle de eventos de un solo subproceso. En este artículo, analizaremos este bucle de eventos y cómo implementa funciones de forma asíncrona mediante el uso de devoluciones de llamada.
Operaciones de bloqueo y no bloqueo: las operaciones de bloqueo se refieren a las piezas de código que bloquean la ejecución de otro código hasta que se completan. Mientras que las operaciones sin bloqueo permiten que se ejecuten más fragmentos de código sin hacerlos esperar y usar devoluciones de llamada cuando se completan.
Por lo tanto, se puede decir que el código de bloqueo funciona de forma síncrona, mientras que el código de no bloqueo funciona de forma asíncrona. Mientras discutimos el código sin bloqueo, se nos ocurre un término llamado devolución de llamada. La devolución de llamada es una función que se invoca cuando un proceso completa su ejecución y desea continuar su ejecución normal con la función externa.
Node y bucle de eventos: ahora que sabemos qué son las operaciones de bloqueo y no bloqueo, podemos analizar cómo el Node evita el código de bloqueo. El Node utiliza un único subproceso, lo que significa que se puede ejecutar una tarea a la vez. Esto se hace usando una pila. Mientras lee el código de arriba a abajo, cada instrucción se coloca en una pila y cuando se completa su ejecución, sale de la pila. Ahora podemos encontrarnos con una instrucción/función que tardará más en ejecutarse, lo que puede dar como resultado un retraso en la extracción de la pila y la ejecución de más instrucciones.
Entonces, lo que permite Node.js es el uso de Event Loop . Cada vez que nos encontramos con una situación de este tipo, el proceso que causa el retraso se descarga de la pila y la ejecución de ese proceso continúa en paralelo a la ejecución posterior del código principal. Por lo tanto, la devolución de llamada para esa función se envía a una cola de tareas y el código continúa ejecutándose de forma asíncrona. Cuando el proceso completa su ejecución, la función de devolución de llamada devuelve el resultado deseado de ese proceso y reanuda la ejecución normal.
Ejemplo: Consideremos un ejemplo que demostrará cómo funciona el bucle de eventos.
index.js
<script> // Simple JavaScript Code to show Event // loop demonstration for Node console.log("Geeks"); // Printing Geeks after 3 seconds setTimeout(function cb() { console.log("Geeks"); }, 3000); console.log("For"); </script>
Ejecute el archivo index.js con el siguiente comando.
Producción:
Geeks For Geeks
Explicación: aunque la instrucción para iniciar sesión en Geeks es anterior a la instrucción para iniciar sesión en For , ese no es el orden en que se inician sesión en la consola. Lo que sucede es que cuando se llama a la función setTimeout , se activa el temporizador para esperar 3 segundos. Pero este tiempo de espera no ocurrirá mientras la función esté en la pila de llamadas y, en su lugar, la API de Node la maneje. Por lo tanto, las instrucciones adicionales se procesan como deberían y cuando el temporizador llega a cero, se invocará la función de devolución de llamada y se devolverá el resultado de la función.
Referencias: https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/
Publicación traducida automáticamente
Artículo escrito por greenblade29 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA