1. ノードでタイマーを使用する場合の問題は、それが正確ではないことです。たとえば、setTimeout() は 10 ミリ秒後にタスクが実行されるように設定しますが、9 ミリ秒以降はタスクに 5 ミリ秒かかります。もう一度ターンします。4 ミリ秒遅れています。
ノードのタイマーについては以上です。
2. コードを見てください:
この例を通して、nextTick() が主に非同期実行に使用されることが誰でも明確にわかると思います。
コードを見てみましょう:
setImmediate も非同期で実行されることがわかりました。これは奇妙です。
では、nextTick() との違いは何でしょうか?
コードを見てください:
コード 1:
コード 2:
コードの順序は違っても、実行結果は同じであることがわかりました。
結果からわかります:
nextTick()のコールバック関数の実行優先度はsetImmediate()よりも高いです
process.nextTick() はアイドル オブザーバーに属し、setImmediate() はチェック オブザーバーに属します。ループ検査の各ラウンドでは、アイドル オブザーバーが I/O オブザーバーに先行し、I/O オブザーバーがチェックに先行します。観察者。
具体的な実装に関しては、process.nextTick() のコールバック関数は配列
に格納されます。
setImmediate()の結果はリンクリストに保存されます。
動作に関しては、 process.nextTick() は各サイクルで配列内のすべてのコールバック関数を実行します。
そして setImmediate() は各サイクル
でリンクされたリスト内のコールバック関数を実行します。
実行結果からわかるように、setImmediate() の最初のコールバック関数が実行されると、2 番目のコールバック関数はすぐには実行されず、最初に nextTick() を再度 setImmediate() 回押します。この設計の理由は、各ループが迅速に終了し、CPU が過剰に占有して後続の I/O 呼び出しがブロックされるのを防ぐためです。
上記はnode.jsのタイマーnextTick()とsetImmediate()の違いについての情報です。