Heim > Web-Frontend > js-Tutorial > Analyse des Unterschieds zwischen Timer nextTick() und setImmediate() in node.js_node.js

Analyse des Unterschieds zwischen Timer nextTick() und setImmediate() in node.js_node.js

WBOY
Freigeben: 2016-05-16 16:30:02
Original
1828 Leute haben es durchsucht

1. Das Problem bei der Verwendung von Timern im Knoten besteht darin, dass setTimeout() beispielsweise die Ausführung einer Aufgabe nach 10 ms festlegt, nach 9 ms jedoch 5 ms in Anspruch nimmt erneut umdrehen, wurde um 4 ms verzögert.

Okay, das ist alles über den Timer im Knoten.

2. Schauen Sie sich den Code an:

Code kopieren Der Code lautet wie folgt:

process.nextTick(function(){
console.log("Verzögerte Ausführung");
});
console.log("Normale Ausführung 1");
console.log("Normale Ausführung 2");
console.log("Normale Ausführung 3");
console.log("Normale Ausführung 4");

Anhand dieses Beispiels kann meiner Meinung nach jeder klar erkennen, wofür nextTick() verwendet wird. Es wird hauptsächlich für die asynchrone Ausführung verwendet.

Sehen Sie sich den Code an:

Code kopieren Der Code lautet wie folgt:

setImmediate(function(){
console.log("Verzögerte Ausführung");
});
console.log("Normale Ausführung");

Wir haben festgestellt, dass setImmediate auch asynchron ausgeführt wird. Es ist seltsam

Was ist also der Unterschied zwischen it und nextTick()?

Sehen Sie sich den Code an:

Code 1:

Code kopieren Der Code lautet wie folgt:

process.nextTick(function(){
console.log("nextTick Verzögerung")
});
setImmediate(function(){
console.log("setImmediate Verzögerung");
});
console.log("Normale Ausführung");

Ergebnis:

Code 2:

Code kopieren Der Code lautet wie folgt:

setImmediate(function(){
console.log("setImmediate Verzögerung");
});
process.nextTick(function(){
console.log("nextTick Verzögerung")
});
console.log("Normale Ausführung");

Ergebnis:

Ich habe festgestellt, dass das Ausführungsergebnis dasselbe ist, obwohl die Reihenfolge der Codes unterschiedlich ist.

Es kann aus den Ergebnissen gefunden werden:

Die Ausführungspriorität der Callback-Funktion von nextTick() ist höher als die von setImmediate();

process.nextTick() gehört zum Leerlaufbeobachter und setImmediate() gehört zum Prüfbeobachter. In jeder Runde der Schleifeninspektion geht der Leerlaufbeobachter dem E/A-Beobachter und der E/A-Beobachter der Prüfung voraus Beobachter. .

Im Hinblick auf die spezifische Implementierung wird die Rückruffunktion von process.nextTick() in einem Array gespeichert,
Das Ergebnis von setImmediate() wird in der verknüpften Liste gespeichert.
Was das Verhalten betrifft, führt Process.nextTick() in jedem Zyklus alle Callback-Funktionen im Array aus Und setImmediate() führt in jedem Zyklus eine Rückruffunktion in der verknüpften Liste aus

//2 Rückruffunktionen für nextTick() hinzufügen
process.nextTick(function(){
console.log("nextTick verzögerte Ausführung 1");
});
process.nextTick(function(){
console.log("nextTick verzögerte Ausführung 2");
});
//Zwei setImmediate()-Rückruffunktionen hinzufügen
setImmediate(function(){
console.log("setImmediate verzögerte Ausführung 1");
Process.nextTick(function(){
console.log("Starke Einfügung");
});
});
setImmediate(function(){
console.log("setImmediate verzögerte Ausführung 2");
});
console.log("Normale Ausführung");

Aus den Ausführungsergebnissen geht hervor: Wenn die erste Rückruffunktion von setImmediate() ausgeführt wird, wird die zweite nicht sofort ausgeführt, sondern tritt zuerst erneut in den nächsten Zyklus ein, setImmediate(). Der Grund für dieses Design besteht darin, sicherzustellen, dass jede Schleife schnell beendet werden kann und verhindert, dass die CPU zu viel belegt und nachfolgende E/A-Aufrufe blockiert.

Das Obige ist die Information über den Unterschied zwischen dem Timer nextTick() und setImmediate() in node.js. Kennt ihr den Unterschied zwischen ihnen?

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage