1. Le problème avec l'utilisation des minuteries dans le nœud est qu'il n'est pas précis. Par exemple, SetTimeout () définit une tâche à exécuter après 10 ms, mais après 9 ms, une tâche prend 5 ms. Quand il s'agit de la minuterie, il a été retardé de 4 ms.
Eh bien, il y a tellement de choses à dire sur la minuterie dans le nœud.
2. Regardez le code:
La copie de code est la suivante:
process.NextTick (function () {
Console.log ("EXÉCUTION DÉTENDE");
});
Console.log ("Exécuter 1 normalement");
console.log ("Exécution ordinaire 2");
console.log ("Exécution normale 3");
console.log ("Exécution ordinaire 4");
Grâce à cet exemple, je pense que tout le monde peut voir clairement à quoi est utilisé NextTick (). Il est principalement utilisé pour l'exécution asynchrone.
En regardant le code:
La copie de code est la suivante:
SetImMediate (function () {
Console.log ("EXÉCUTION DÉTENDE");
});
console.log ("exécution normale");
Nous avons constaté que Settimmediat est également exécuté de manière asynchrone. C'est étrange
Alors, quelle est la différence entre elle et NextTick ()?
Regardez le code:
Code 1:
La copie de code est la suivante:
process.NextTick (function () {
Console.log ("NextTick Delay")
});
SetImMediate (function () {
Console.log ("SetImMmediate Delay");
});
console.log ("exécution normale");
résultat:
Code 2:
La copie de code est la suivante:
SetImMediate (function () {
Console.log ("SetImMmediate Delay");
});
process.NextTick (function () {
Console.log ("NextTick Delay")
});
console.log ("exécution normale");
résultat:
J'ai constaté que bien que la séquence de code soit différente, les résultats de l'exécution sont les mêmes.
D'après les résultats, nous pouvons trouver:
La priorité d'exécution de la fonction de rappel de NextTick () est supérieure à SetImMediate ();
Process.NextTick () appartient à Idle Observer, et SetImMediat () appartient à Vérifier l'observateur. Dans chaque cycle de chèques de boucle, l'observateur inactif est en avance sur l'observateur d'E / S, et l'observateur d'E / S est en avance sur l'observateur de chèques.
Dans une implémentation spécifique, la fonction de rappel de Process.NextTick () est stockée dans un tableau.
Le résultat de SetImMediate () est enregistré dans la liste liée.
En termes de comportement, Process.NextTick () exécutera toutes les fonctions de rappel dans le tableau dans chaque boucle.
SETIMMEDIAD () Exécute une fonction de rappel dans la liste liée dans chaque boucle.
La copie de code est la suivante:
// Ajouter 2 fonctions de rappel NextTick ()
process.NextTick (function () {
Console.log ("NextTick Delays Execution 1");
});
process.NextTick (function () {
console.log ("NextTick Delay Execution 2");
});
// Ajouter deux fonctions de rappel SetImMediate ()
SetImMediate (function () {
Console.log ("SetImMediate Detrays Execution 1");
process.NextTick (function () {
console.log ("insert fort");
});
});
SetImMediate (function () {
Console.log ("SetImMediat Detrays Exécution 2");
});
console.log ("exécution normale");
D'après les résultats d'exécution, on peut voir que lorsque la première fonction de rappel SetImMediate () est exécutée, la seconde n'est pas exécutée immédiatement, mais entre dans le prochain tour de boucle et exécute à nouveau dans l'ordre de NextTick () Priorité et SetImMmediate (). La raison de cette conception est de s'assurer que chaque boucle peut être exécutée rapidement et empêcher le CPU de consommer trop et de bloquer les appels d'E / S ultérieurs.
Ce qui précède est les informations sur la différence entre NextTick () et SetImMediate () dans Node.js. Êtes-vous clair sur la différence entre eux?