シングルスレッド-------イベントループのJSの本質

ブラウザまたはノードの環境を確認する方法?

ウィンドウ内のノードは未定義である。setImmediateが定義され、ブラウザで定義されていません

タイマー段階:この段階ではのsetTimeoutとのsetIntervalを実行します

ステージをチェック:実行setImmediate

マクロタスク[タスク]マクロタスク:スクリプト(コードページ)、のsetTimeout、のsetInterval、I / Oイベント、UIの対話イベント(イベントをクリックしてください)

マイクロタスク[ジョブ]微任务:プロミス、process.nextTick、プロミス()を()。

マクロタスクは、複数のキューを持つことができます

唯一のマイクロタスクキュー

キューの前列内部タスク、実装の遅延のミリ秒数が少ない、との間のSetTimeout

内部のノードでは、タイマー(のsetTimeout、たsetInterval)はsetImmediateに優先順位を与えます

setTimeout(()=> { 
   にconsole.log( 'のsetTimeout')
}、0)1000より大きい//時間は、最初setImmediate実行する
(()=> {にconsole.log( 'setImmediate')})setImmediateを

  

console.log( '開始'); 
setTimeout(関数(){ 
    にconsole.log( 'タイムアウト'); 
}、10); 
新しいプロミス((解決)=> { 
    にconsole.log( '約束'); 
    解決()
    のsetTimeout(()=> { 
        にconsole.log( 'Promsie中的のsetTimeout'); 
    }、0); 
})。次に、( ()=> { 
    にconsole.log( 'を'); 
}); 
console.log( '末端');

  

操作機構

1.マクロタスクの実行スタックを実行します。 

2.マイクロマイクロタスクジョブキューに追加するには、マイクロタスクの実装に遭遇しました。

3.現在のマクロタスクはすぐに、キューの中のマイクロミッションタスクを終了します。 

4.現在のタスク実行キューマイクロタスクが完了し、レンダリングを引き継ぐために、レンダリング、GUIのスレッドを確認してください。 

5.レンダリング完了し、jsの実行中のマクロタスク(取るためにイベントキュー)と、オープン次回のイベントループたら、引き継ぐために通します。

おすすめ

転載: www.cnblogs.com/jcxfighting/p/11756153.html