1.ノードでタイマーを使用することの問題は、正確ではないことです。たとえば、setimeout()は、10ms後に実行されるタスクを設定しますが、9ms後、タスクには5msが必要です。タイマーが再びターンすると、4msが遅れています。
まあ、ノードのタイマーについて言うことはたくさんあります。
2。コードを見てください:
コードコピーは次のとおりです。
process.nexttick(function(){
console.log( "delayed execution");
});
console.log( "execute 1 normally");
console.log( "通常の実行2");
console.log( "通常の実行3");
console.log( "通常の実行4");
この例を通じて、誰もが次のTick()が使用されているものをはっきりと見ることができると思います。主に非同期実行に使用されます。
コードを見る:
コードコピーは次のとおりです。
setimmediate(function(){
console.log( "delayed execution");
});
console.log( "通常の実行");
Setimmediateも非同期に実行されていることがわかりました。奇妙です
それでは、それとnexttick()の違いは何ですか?
コードを見てください:
コード1:
コードコピーは次のとおりです。
process.nexttick(function(){
console.log( "Nextick Delay")
});
setimmediate(function(){
console.log( "setimmediate delay");
});
console.log( "通常の実行");
結果:
コード2:
コードコピーは次のとおりです。
setimmediate(function(){
console.log( "setimmediate delay");
});
process.nexttick(function(){
console.log( "Nextick Delay")
});
console.log( "通常の実行");
結果:
コードシーケンスは異なりますが、実行結果は同じであることがわかりました。
結果から、私たちは見つけることができます:
NextTick()のコールバック関数実行の優先順位は、setimmediate()よりも高くなります。
process.nexttick()はアイドルオブザーバーに属し、setimmediate()はチェックオブザーバーに属します。ループチェックの各ラウンドでは、アイドルオブザーバーはI/Oオブザーバーの先を行っており、I/Oオブザーバーはチェックオブザーバーの先を行っています。
特定の実装では、process.nexttick()のコールバック関数が配列に保存されます。
Setimmediate()の結果は、リンクリストに保存されます。
動作に関しては、process.nexttick()は、各ループの配列内のすべてのコールバック関数を実行します。
SetimMediate()各ループのリンクリストでコールバック関数を実行します。
コードコピーは次のとおりです。
// 2つのNextTick()コールバック関数を追加します
process.nexttick(function(){
console.log( "nexttick Delays execution 1");
});
process.nexttick(function(){
console.log( "Nextick Delay Execution 2");
});
// 2つのsetimmediate()コールバック関数を追加します
setimmediate(function(){
console.log( "Setimmediate Delays execution 1");
process.nexttick(function(){
console.log( "strong insert");
});
});
setimmediate(function(){
console.log( "Setimmediate Delays execution 2");
});
console.log( "通常の実行");
実行結果から、最初のSetimmediate()コールバック関数が実行されると、2番目のコールバック関数がすぐに実行されるのではなく、次のループのラウンドに入り、次のTick()PriorityおよびSetimmediate()Timesの順序で再び実行されることがわかります。この設計の理由は、各ループを迅速に実行できるようにし、CPUが消費しすぎてその後のI/Oコールをブロックすることを防ぐためです。
上記は、node.jsのnexttick()とsetimmediate()の違いに関する情報です。それらの違いについてはっきりしていますか?