Para comprender la diferencia entre los métodos process.nextTick() y setImmediate(), primero debemos comprender el funcionamiento de Node.js Event Loop .
¿Qué es el bucle de eventos de Node.js?
Debido al hecho de que JavaScript es de subproceso único, es decir, solo realiza un único proceso a la vez, por lo que es el bucle de eventos el que permite a Node.js realizar operaciones de E/S sin bloqueo.
¿Funcionamiento de Event Loop?
Al comienzo de un programa de JavaScript, se inicializa un bucle de eventos. Hay varias operaciones que se ejecutan en un bucle de eventos. A continuación se muestra la secuencia en la que se ejecutan diferentes en una sola iteración del bucle de eventos. Estas operaciones se procesan en una cola.
temporizadores–>devoluciones de llamada pendientes–>inactivo, preparar–>conexiones (sondeo, datos, etc.)–>verificar–>cerrar devoluciones de llamada
Comprensión del método process.nextTick(): cada vez que se inicializa una nueva cola de operaciones, podemos considerarla como un nuevo tick . El método process.nextTick() agrega la función de devolución de llamada al inicio de la siguiente cola de eventos. Cabe señalar que, al comienzo del proceso del programa, se llama al método nextTick() por primera vez antes de que se procese el bucle de eventos.
Sintaxis:
process.nextTick(callback);
Comprender el método setImmdeiate(): cada vez que llamamos al método setImmediate(), su función de devolución de llamada se coloca en la fase de verificación de la siguiente cola de eventos. Hay un pequeño detalle que debe tenerse en cuenta aquí: el método setImmediate() se llama en la fase de encuesta y sus funciones de devolución de llamada se invocan en la fase de verificación .
Sintaxis:
setImmediate(callback);
Ejemplo:
setImmediate(function A() { console.log("1st immediate"); }); setImmediate(function B() { console.log("2nd immediate"); }); process.nextTick(function C() { console.log("1st process"); }); process.nextTick(function D() { console.log("2nd process"); }); // First event queue ends here console.log("program started");
Para el programa anterior, las colas de eventos se inicializan de la siguiente manera:
- En la primera cola de eventos, solo se imprime ‘el programa iniciado’.
- Luego se inicia la segunda cola de eventos y la función C, es decir, la devolución de llamada del método process.nextTick(), se coloca al comienzo de la cola de eventos. Se ejecuta C y la cola finaliza.
- Luego, la cola de eventos anterior finaliza y la tercera cola de eventos se inicializa con la devolución de llamada D. Luego, la función de devolución de llamada A del método setImmdeiate() se coloca seguida de B.
Ahora, la tercera cola de eventos se ve así:D A B
Ahora las funciones D, A, B se ejecutan en el orden en que están presentes en la cola.
Producción:
Veamos las diferencias en forma tabular -:
proceso.siguienteTick() | establecerInmediato() | |
1. | process.nextTick() se usa para programar una función de devolución de llamada que se invocará en la siguiente iteración del bucle de eventos. | El método setImmediate() se usa para ejecutar una función justo después de que finaliza el ciclo del evento actual. |
2. | Su beneficio es que no tiene límite de tiempo para recibir una devolución de llamada. | El método setImmediate() solo se procesa en la fase del controlador de verificación del ciclo de eventos |
3. | La función process.nextTick() es específica del bucle de eventos de Node.js | Generalmente se encuentra en el módulo Temporizadores. |
4. |
Su sintaxis es -: proceso.nextTick(devolución de llamada); |
Su sintaxis es -: setImmediate(devolución de llamada); |
5. | Tiene el beneficio de que tiene el potencial de causar inanición de E/S | Su valor de retorno es un identificador de temporizador único que se puede usar en otra llamada de función. |
Publicación traducida automáticamente
Artículo escrito por parasmadan15 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA