"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo funciona el bucle de eventos en Node.js?

¿Cómo funciona el bucle de eventos en Node.js?

Publicado el 2024-08-24
Navegar:852

How event loop work in Node.js?

El bucle de eventos es un concepto central en Node.js que le permite manejar operaciones asincrónicas de manera eficiente. Aquí tienes una explicación simplificada de cómo funciona:

1. Naturaleza de un solo hilo

Node.js opera en un solo hilo. Esto significa que sólo puede ejecutar un fragmento de código a la vez. Sin embargo, Node.js está diseñado para manejar muchas operaciones simultáneamente sin requerir múltiples subprocesos.

2. E/S sin bloqueo

Node.js utiliza operaciones de E/S sin bloqueo. Cuando Node.js realiza tareas como leer archivos, consultar una base de datos o realizar solicitudes de red, no espera a que se completen estas tareas antes de pasar a la siguiente. En cambio, continúa ejecutando otro código mientras se procesan estas tareas.

3. Mecanismo de bucle de eventos

El bucle de eventos es responsable de gestionar la ejecución del código y manejar eventos asincrónicos. Comprueba continuamente la "cola" de tareas y decide cuáles ejecutar. Aquí hay un desglose paso a paso:

  • Inicializar: Cuando se inicia una aplicación Node.js, se inicializa y configura el entorno.
  • Fase de ejecución: Node.js ejecuta cualquier código inicial de forma sincrónica. Si hay tareas asincrónicas (como lectura de archivos o solicitudes HTTP), se transfieren a las API del sistema.
  • Fases del bucle de eventos: el bucle de eventos tiene varias fases y procesa las tareas en cada fase en un orden específico:
    • Fase de temporizadores: ejecuta devoluciones de llamada programadas por setTimeout() y setInterval().
    • Fase de devoluciones de llamadas de E/S: ejecuta devoluciones de llamadas para operaciones de E/S, como lecturas de archivos o solicitudes de red.
    • Fase inactiva, preparación: Fase interna utilizada para tareas del sistema.
    • Fase de encuesta: Recupera nuevos eventos de E/S, ejecutando sus devoluciones de llamada. Si la cola de sondeo está vacía, comprobará si hay devoluciones de llamada en la cola setImmediate().
    • Verificar fase: ejecuta devoluciones de llamada programadas por setImmediate().
    • Fase de devoluciones de llamada de cierre: maneja eventos de cierre, como los emitidos por socket.on('close').
  • Volver a verificar y salir: si el bucle de eventos no tiene más tareas que procesar, saldrá, permitiendo que el programa finalice. Si aún quedan tareas pendientes, continuará ejecutándose.

4. Cola de devolución de llamada

Las tareas asincrónicas, una vez completadas, envían sus devoluciones de llamada a una cola. El bucle de eventos selecciona estas devoluciones de llamada de la cola y las ejecuta en orden.

5. Cola de microtareas (siguiente tick)

Además de la cola principal, también hay una cola de microtareas (o cola de siguiente tick) donde se ponen en cola las devoluciones de llamada programadas con Process.nextTick() o los controladores .then() de promesas. Las microtareas tienen prioridad sobre las devoluciones de llamada regulares, lo que significa que se ejecutan después de que se completa la operación actual pero antes de que el bucle de eventos pase a la siguiente fase.

Ejemplo

Aquí hay un ejemplo sencillo para ilustrar cómo funciona el bucle de eventos:

const fs = require('fs');

console.log('Start');

fs.readFile('file.txt', (err, data) => {
  if (err) throw err;
  console.log('File read complete');
});

console.log('End');

Producción:

Start
End
File read complete

Explicación:

  1. console.log('Inicio'); y console.log('Fin'); se ejecutan sincrónicamente.
  2. fs.readFile inicia una operación de lectura de archivo asincrónica y continúa ejecutando la siguiente línea de código sin esperar.
  3. Una vez que se completa la operación de lectura del archivo, su devolución de llamada (console.log('Lectura de archivo completa');) se envía a la cola de devolución de llamada del bucle de eventos.
  4. El bucle de eventos procesa la devolución de llamada una vez que se completa la ejecución sincrónica del código.

El bucle de eventos permite a Node.js manejar eficientemente muchas operaciones a la vez, a pesar de tener un solo subproceso, al delegar operaciones al sistema y manejar sus resultados de forma asincrónica.

El Event Loop organiza la ejecución de tareas, priorizando la Cola de microtareas para garantizar que las promesas y las operaciones relacionadas se resuelvan rápidamente antes de pasar a las tareas en la Cola de tareas principal (Tarea de macro).

Esta dinámica permite que JavaScript maneje comportamientos asincrónicos complejos en un entorno de un solo subproceso.

Declaración de liberación Este artículo se reproduce en: https://dev.to/syed_ammar/how-event-loop-work-in-nodejs-4lf4?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3