1. Das Problem bei der Verwendung von Timern im Knoten ist, dass es nicht genau ist. Beispielsweise legt SetTimeOut () eine Aufgabe fest, die nach 10 ms ausgeführt werden soll, aber nach 9 ms dauert eine Aufgabe 5 ms. Wenn es sich um die Timer -Wende handelt, wurde es um 4 ms verzögert.
Nun, es gibt so viele Dinge über den Timer im Knoten zu sagen.
2. Sehen Sie sich den Code an:
Die Codekopie lautet wie folgt:
process.nextTick (function () {
console.log ("verzögerte Ausführung");
});
console.log ("Normalerweise 1 ausführen");
console.log ("gewöhnliche Ausführung 2");
console.log ("normale Ausführung 3");
console.log ("gewöhnliche Ausführung 4");
In diesem Beispiel denke ich, dass jeder deutlich sehen kann, wofür NextTick () verwendet wird. Es wird hauptsächlich für die asynchrone Ausführung verwendet.
Betrachten Sie den Code:
Die Codekopie lautet wie folgt:
setimmediate (function () {
console.log ("verzögerte Ausführung");
});
console.log ("normale Ausführung");
Wir fanden heraus, dass Setimmediat ebenfalls asynchron ausgeführt wird. Es ist seltsam
Was ist der Unterschied zwischen ihm und NextTick ()?
Schauen Sie sich den Code an:
Code 1:
Die Codekopie lautet wie folgt:
process.nextTick (function () {
console.log ("NextTick Delay")
});
setimmediate (function () {
console.log ("setImmediate delay");
});
console.log ("normale Ausführung");
Ergebnis:
Code 2:
Die Codekopie lautet wie folgt:
setimmediate (function () {
console.log ("setImmediate delay");
});
process.nextTick (function () {
console.log ("NextTick Delay")
});
console.log ("normale Ausführung");
Ergebnis:
Ich fand heraus, dass die Codesquenz zwar unterschiedlich ist, die Ausführungsergebnisse jedoch gleich sind.
Aus den Ergebnissen können wir finden:
Die Callback -Funktionsausführung von NextTick () ist höher als Setimmediate ();
process.nextTick () gehört zum Idle Observer und setImmediate () gehört zum Überprüfen von Observer. In jeder Runde der Schleifenprüfungen ist der Leerlaufbeobachter dem E/A -Beobachter voraus, und der E/A -Beobachter ist dem Scheckbeobachter voraus.
In der spezifischen Implementierung wird die Rückruffunktion von Process.NextTick () in einem Array gespeichert.
Das Ergebnis von SetImmediate () wird in der verlinkten Liste gespeichert.
In Bezug auf das Verhalten wird process.nextTick () alle Rückruffunktionen im Array in jeder Schleife ausführen.
setImmediate () führt eine Rückruffunktion in der verknüpften Liste in jeder Schleife aus.
Die Codekopie lautet wie folgt:
// 2 NextTick () -Rallback -Funktionen hinzufügen
process.nextTick (function () {
console.log ("NextTick verzögert die Ausführung 1");
});
process.nextTick (function () {
console.log ("NextTick Delay Execution 2");
});
// Fügen Sie zwei Rückruffunktionen von SetImmediate () hinzu
setimmediate (function () {
console.log ("SetMediat -Verzögerungen Ausführung 1");
process.nextTick (function () {
console.log ("starker Einsatz");
});
});
setimmediate (function () {
console.log ("SetMediat -Verzögerungsausführung 2");
});
console.log ("normale Ausführung");
Aus den Ausführungsergebnissen ist ersichtlich, dass bei Ausführung der First SetImmediate () -Rallback -Funktion der zweite nicht sofort ausgeführt wird, sondern in die nächste Runde der Schleife eintritt und in der Reihenfolge von NextTick () Priorität und SetImmediate () Male erneut ausgeführt wird. Der Grund für dieses Design besteht darin, sicherzustellen, dass jede Schleife schnell ausgeführt werden kann und die CPU daran hindert, zu viel zu konsumieren und nachfolgende E/A -Anrufe zu blockieren.
Die obigen sind die Informationen über den Unterschied zwischen NextTick () und SetImmediate () in Node.js. Sind Sie sich über den Unterschied zwischen ihnen klar?