1. El problema con el uso de temporizadores en el nodo es que no es preciso. Por ejemplo, SetTimeOut () establece una tarea que se ejecutará después de 10 ms, pero después de los 9 ms, una tarea toma 5 ms. Cuando es el temporizador de nuevo, se ha retrasado por 4 ms.
Bueno, hay muchas cosas que decir sobre el temporizador en el nodo.
2. Mira el código:
La copia del código es la siguiente:
Process.NextTick (function () {
console.log ("Ejecución retrasada");
});
console.log ("ejecutar 1 normalmente");
console.log ("Ejecución ordinaria 2");
console.log ("Ejecución normal 3");
console.log ("Ejecución ordinaria 4");
A través de este ejemplo, creo que todos pueden ver claramente para qué se usa NextTick (). Se usa principalmente para la ejecución asincrónica.
Mirando el código:
La copia del código es la siguiente:
setimmediate (function () {
console.log ("Ejecución retrasada");
});
console.log ("ejecución normal");
Descubrimos que SetImmediate también se ejecuta asincrónicamente. Es extraño
Entonces, ¿cuál es la diferencia entre él y NextTick ()?
Mira el código:
Código 1:
La copia del código es la siguiente:
Process.NextTick (function () {
console.log ("Delebre de NextTick")
});
setimmediate (function () {
console.log ("setimmediate demandado");
});
console.log ("ejecución normal");
resultado:
Código 2:
La copia del código es la siguiente:
setimmediate (function () {
console.log ("setimmediate demandado");
});
Process.NextTick (function () {
console.log ("Delebre de NextTick")
});
console.log ("ejecución normal");
resultado:
Descubrí que aunque la secuencia de código es diferente, los resultados de la ejecución son los mismos.
De los resultados, podemos encontrar:
La prioridad de ejecución de la función de devolución de llamada de NextTick () es mayor que SetImmediate ();
Process.nextTick () pertenece al observador inactivo, y setimmediate () pertenece a Check Observer. En cada ronda de verificaciones de bucle, el observador inactivo está por delante del observador de E/S, y el observador de E/S está por delante del observador de cheques.
En la implementación específica, la función de devolución de llamada de Process.NextTick () se almacena en una matriz.
El resultado de setimmediate () se guarda en la lista vinculada.
En términos de comportamiento, Process.NextTick () ejecutará todas las funciones de devolución de llamada en la matriz en cada bucle.
setimmediate () ejecuta una función de devolución de llamada en la lista vinculada en cada bucle.
La copia del código es la siguiente:
// agregar 2 funciones de devolución de llamada nextTick ()
Process.NextTick (function () {
console.log ("NextChick retrasa la ejecución 1");
});
Process.NextTick (function () {
console.log ("Ejecución de retraso de NextTick 2");
});
// Agregar dos funciones de devolución de llamada setimmediate ()
setimmediate (function () {
console.log ("Setim.
Process.NextTick (function () {
console.log ("inserto fuerte");
});
});
setimmediate (function () {
console.log ("Setim. Ejecución de retrasos 2");
});
console.log ("ejecución normal");
A partir de los resultados de la ejecución, se puede ver que cuando se ejecuta la primera función de devolución de llamada setimmediate (), la segunda no se ejecuta de inmediato, sino que ingresa a la siguiente ronda de bucle, y se ejecuta nuevamente en el orden de la prioridad de NextTick () y los tiempos setimmediate (). La razón de este diseño es garantizar que cada bucle se pueda ejecutar rápidamente y evitar que la CPU consuma demasiado y bloquee las llamadas de E/S posteriores.
Lo anterior es la información sobre la diferencia entre nextTick () y setimmediate () en node.js. ¿Tienes claro la diferencia entre ellos?