ホームページ > ウェブフロントエンド > jsチュートリアル > node.js_node.js のタイマー nextTick() と setImmediate() の違いの分析

node.js_node.js のタイマー nextTick() と setImmediate() の違いの分析

WBOY
リリース: 2016-05-16 16:30:02
オリジナル
1828 人が閲覧しました

1. ノードでタイマーを使用する場合の問題は、それが正確ではないことです。たとえば、setTimeout() は 10 ミリ秒後にタスクが実行されるように設定しますが、9 ミリ秒以降はタスクに 5 ミリ秒かかります。もう一度ターンします。4 ミリ秒遅れています。

ノードのタイマーについては以上です。

2. コードを見てください:

コードをコピーします コードは次のとおりです:

process.nextTick(function(){
console.log("遅延実行");
});
console.log("通常実行1");
console.log("通常実行2");
console.log("通常実行3");
console.log("通常実行4");

この例を通して、nextTick() が主に非同期実行に使用されることが誰でも明確にわかると思います。

コードを見てみましょう:

コードをコピーします コードは次のとおりです:
setImmediate(function(){
console.log("遅延実行");
});
console.log("通常実行");

setImmediate も非同期で実行されることがわかりました。これは奇妙です。

では、nextTick() との違いは何でしょうか?

コードを見てください:

コード 1:

コードをコピーします コードは次のとおりです:
process.nextTick(function(){
console.log("nextTick 遅延")
});
setImmediate(function(){
console.log("setImmediate遅延");
});
console.log("通常実行");

結果:

コード 2:

コードをコピーします コードは次のとおりです:
setImmediate(function(){
console.log("setImmediate遅延");
});
process.nextTick(function(){
console.log("nextTick 遅延")
});
console.log("通常実行");

結果:

コードの順序は違っても、実行結果は同じであることがわかりました。

結果からわかります:

nextTick()のコールバック関数の実行優先度はsetImmediate()よりも高いです

process.nextTick() はアイドル オブザーバーに属し、setImmediate() はチェック オブザーバーに属します。ループ検査の各ラウンドでは、アイドル オブザーバーが I/O オブザーバーに先行し、I/O オブザーバーがチェックに先行します。観察者。

具体的な実装に関しては、process.nextTick() のコールバック関数は配列

に格納されます。 setImmediate()の結果はリンクリストに保存されます。
動作に関しては、 process.nextTick() は各サイクルで配列内のすべてのコールバック関数を実行します。 そして setImmediate() は各サイクル
でリンクされたリスト内のコールバック関数を実行します。

コードをコピーします コードは次のとおりです:
// nextTick()
に 2 つのコールバック関数を追加します process.nextTick(function(){
console.log("nextTick 遅延実行 1");
});
process.nextTick(function(){
console.log("nextTick 遅延実行 2");
});
// setImmediate() コールバック関数を 2 つ追加します
setImmediate(function(){
console.log("setImmediate 遅延実行 1");
Process.nextTick(function(){
console.log("強い挿入");
});
});
setImmediate(function(){
console.log("setImmediate 遅延実行 2");
});
console.log("通常実行");

実行結果からわかるように、setImmediate() の最初のコールバック関数が実行されると、2 番目のコールバック関数はすぐには実行されず、最初に nextTick() を再度 setImmediate() 回押します。この設計の理由は、各ループが迅速に終了し、CPU が過剰に占有して後続の I/O 呼び出しがブロックされるのを防ぐためです。

上記はnode.jsのタイマーnextTick()とsetImmediate()の違いについての情報です。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート