精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:說說對 Node.js 中的事件循環機制理解?

開發 前端
在瀏覽器事件循環中,我們了解到javascript在瀏覽器中的事件循環機制,其是根據HTML5定義的規范來實現

本文轉載自微信公眾號「JS每日一題」,作者灰灰。轉載本文請聯系JS每日一題公眾號。  

一、是什么

在瀏覽器事件循環中,我們了解到javascript在瀏覽器中的事件循環機制,其是根據HTML5定義的規范來實現

而在NodeJS中,事件循環是基于libuv實現,libuv是一個多平臺的專注于異步IO的庫,如下圖最右側所示:

上圖EVENT_QUEUE 給人看起來只有一個隊列,但EventLoop存在6個階段,每個階段都有對應的一個先進先出的回調隊列

二、流程

上節講到事件循環分成了六個階段,對應如下:

  • timers階段:這個階段執行timer(setTimeout、setInterval)的回調
  • 定時器檢測階段(timers):本階段執行 timer 的回調,即 setTimeout、setInterval 里面的回調函數
  • I/O事件回調階段(I/O callbacks):執行延遲到下一個循環迭代的 I/O 回調,即上一輪循環中未被執行的一些I/O回調
  • 閑置階段(idle, prepare):僅系統內部使用
  • 輪詢階段(poll):檢索新的 I/O 事件;執行與 I/O 相關的回調(幾乎所有情況下,除了關閉的回調函數,那些由計時器和 setImmediate() 調度的之外),其余情況 node 將在適當的時候在此阻塞
  • 檢查階段(check):setImmediate() 回調函數在這里執行
  • 關閉事件回調階段(close callback):一些關閉的回調函數,如:socket.on('close', ...)

每個階段對應一個隊列,當事件循環進入某個階段時, 將會在該階段內執行回調,直到隊列耗盡或者回調的最大數量已執行, 那么將進入下一個處理階段

除了上述6個階段,還存在process.nextTick,其不屬于事件循環的任何一個階段,它屬于該階段與下階段之間的過渡, 即本階段執行結束, 進入下一個階段前, 所要執行的回調,類似插隊

流程圖如下所示:

在Node中,同樣存在宏任務和微任務,與瀏覽器中的事件循環相似

微任務對應有:

  • next tick queue:process.nextTick
  • other queue:Promise的then回調、queueMicrotask

宏任務對應有:

  • timer queue:setTimeout、setInterval
  • poll queue:IO事件
  • check queue:setImmediate
  • close queue:close事件

其執行順序為:

  • next tick microtask queue
  • other microtask queue
  • timer queue
  • poll queue
  • check queue
  • close queue

三、題目

通過上面的學習,下面開始看看題目

  1. async function async1() { 
  2.     console.log('async1 start'
  3.     await async2() 
  4.     console.log('async1 end'
  5.  
  6. async function async2() { 
  7.     console.log('async2'
  8.  
  9. console.log('script start'
  10.  
  11. setTimeout(function () { 
  12.     console.log('setTimeout0'
  13. }, 0) 
  14.  
  15. setTimeout(function () { 
  16.     console.log('setTimeout2'
  17. }, 300) 
  18.  
  19. setImmediate(() => console.log('setImmediate')); 
  20.  
  21. process.nextTick(() => console.log('nextTick1')); 
  22.  
  23. async1(); 
  24.  
  25. process.nextTick(() => console.log('nextTick2')); 
  26.  
  27. new Promise(function (resolve) { 
  28.     console.log('promise1'
  29.     resolve(); 
  30.     console.log('promise2'
  31. }).then(function () { 
  32.     console.log('promise3'
  33. }) 
  34.  
  35. console.log('script end'

分析過程:

  • 先找到同步任務,輸出script start
  • 遇到第一個 setTimeout,將里面的回調函數放到 timer 隊列中
  • 遇到第二個 setTimeout,300ms后將里面的回調函數放到 timer 隊列中
  • 遇到第一個setImmediate,將里面的回調函數放到 check 隊列中
  • 遇到第一個 nextTick,將其里面的回調函數放到本輪同步任務執行完畢后執行
  • 執行 async1函數,輸出 async1 start
  • 執行 async2 函數,輸出 async2,async2 后面的輸出 async1 end進入微任務,等待下一輪的事件循環
  • 遇到第二個,將其里面的回調函數放到本輪同步任務執行完畢后執行
  • 遇到 new Promise,執行里面的立即執行函數,輸出 promise1、promise2
  • then里面的回調函數進入微任務隊列
  • 遇到同步任務,輸出 script end
  • 執行下一輪回到函數,先依次輸出 nextTick 的函數,分別是 nextTick1、nextTick2
  • 然后執行微任務隊列,依次輸出 async1 end、promise3
  • 執行timer 隊列,依次輸出 setTimeout0
  • 接著執行 check 隊列,依次輸出 setImmediate
  • 300ms后,timer 隊列存在任務,執行輸出 setTimeout2

執行結果如下:

  1. script start 
  2. async1 start 
  3. async2 
  4. promise1 
  5. promise2 
  6. script end 
  7. nextTick1 
  8. nextTick2 
  9. async1 end 
  10. promise3 
  11. setTimeout0 
  12. setImmediate 
  13. setTimeout2 

最后有一道是關于setTimeout與setImmediate的輸出順序

  1. setTimeout(() => { 
  2.   console.log("setTimeout"); 
  3. }, 0); 
  4.  
  5. setImmediate(() => { 
  6.   console.log("setImmediate"); 
  7. }); 

輸出情況如下:

  1. 情況一: 
  2. setTimeout 
  3. setImmediate 
  4.  
  5. 情況二: 
  6. setImmediate 
  7. setTimeout 

分析下流程:

  • 外層同步代碼一次性全部執行完,遇到異步API就塞到對應的階段
  • 遇到setTimeout,雖然設置的是0毫秒觸發,但實際上會被強制改成1ms,時間到了然后塞入times階段
  • 遇到setImmediate塞入check階段
  • 同步代碼執行完畢,進入Event Loop
  • 先進入times階段,檢查當前時間過去了1毫秒沒有,如果過了1毫秒,滿足setTimeout條件,執行回調,如果沒過1毫秒,跳過
  • 跳過空的階段,進入check階段,執行setImmediate回調
  • 這里的關鍵在于這1ms,如果同步代碼執行時間較長,進入Event Loop的時候1毫秒已經過了,setTimeout先執行,如果1毫秒還沒到,就先執行了setImmediate

參考文獻

https://segmentfault.com/a/1190000012258592

https://juejin.cn/post/6844904100195205133

 

https://vue3js.cn/interview/

 

責任編輯:武曉燕 來源: JS每日一題
相關推薦

2021-06-30 07:19:36

React事件機制

2021-06-08 08:33:23

NodeStream數據

2021-06-07 09:41:48

NodeBuffer 網絡協議

2021-06-03 08:14:01

NodeProcessJavaScript

2024-01-05 08:49:15

Node.js異步編程

2021-06-04 07:55:30

Node Fs 操作

2021-05-31 10:35:34

TCPWebSocket協議

2021-06-01 08:25:06

Node.jsJavaScript運行

2021-07-12 08:35:24

組件應用場景

2021-07-07 08:36:45

React應用場景

2021-09-13 09:23:52

TypeScript命名空間

2021-05-27 09:00:00

Node.js開發線程

2021-06-15 10:01:02

應用系統軟件

2024-08-26 14:52:58

JavaScript循環機制

2021-07-13 07:52:03

ReactHooks組件

2017-08-16 10:36:10

JavaScriptNode.js事件驅動

2021-10-29 09:40:21

設計模式軟件

2021-07-29 07:55:20

React Fiber架構引擎

2021-06-29 09:47:34

ReactSetState機制

2021-06-02 09:42:29

Node. js全局對象
點贊
收藏

51CTO技術棧公眾號

亚洲视频资源在线| 精品在线观看免费| 亚洲午夜av久久乱码| 欧美成人黄色网址| av在线free| av在线播放不卡| 国产精品欧美日韩一区二区| 麻豆天美蜜桃91| 日韩理论电影中文字幕| 欧美三级视频在线观看| 日韩写真欧美这视频| 国产精品视频在线播放| 国产高潮国产高潮久久久91| 久久综合五月婷婷| 欧美日韩免费一区二区三区视频| 8x8x华人在线| 嫩草研究院在线| 国产99久久久久久免费看农村| 欧美在线亚洲在线| 国产精品老熟女一区二区| 亚洲动漫在线观看| 欧美xxxx老人做受| 国产一区二区在线免费播放| 黄视频在线免费看| 中文字幕一区二区日韩精品绯色| 久久精品国产第一区二区三区最新章节 | 91国内精品白嫩初高生| 欧美性色综合网| 国自产拍偷拍精品啪啪一区二区| 欧美激情免费| 亚洲国产成人在线| 久久久久网址| 香蕉久久一区二区三区| 国产不卡视频在线播放| 成人亲热视频网站| 91theporn国产在线观看| 性伦欧美刺激片在线观看| 欧美激情免费视频| 久久精品一级片| 91综合久久一区二区| 亚洲男子天堂网| 久久久久亚洲AV成人无码国产| 日韩在线成人| 日韩一卡二卡三卡国产欧美| 伊人网在线综合| av成人在线看| 在线免费视频一区二区| 欧美色图另类小说| 亚洲天堂av影院| 精品日本美女福利在线观看| 欧美 日韩 亚洲 一区| 久色国产在线| 亚洲一二三级电影| 69sex久久精品国产麻豆| 91黄色在线| 亚洲自拍偷拍图区| 国产va亚洲va在线va| 91破解版在线观看| 天天影视色香欲综合网老头| 成年人网站国产| 爱看av在线入口| 亚洲午夜国产一区99re久久| 一本久道高清无码视频| 51漫画成人app入口| 午夜日韩在线电影| 777米奇影视第四色| 超级碰碰久久| 欧美在线观看视频一区二区 | 亚洲精品美女在线观看| 污污免费在线观看| 精品在线播放| 上原亚衣av一区二区三区| 久久久久人妻一区精品色| 91影院成人| 欧美激情综合色| 黄色在线观看国产| 美女视频黄a大片欧美| 川上优av一区二区线观看| 国产aⅴ爽av久久久久成人| 国产成人免费av在线| 久久大片网站| 午夜不卡视频| 亚洲不卡av一区二区三区| 18禁免费无码无遮挡不卡网站| 色香欲www7777综合网| 欧美日韩国产a| 黄页网站在线看| 日韩极品在线| 色妞久久福利网| 青青草精品在线视频| 夜夜夜久久久| 国产在线98福利播放视频| 亚洲黄色小说网址| 久久婷婷色综合| 中国成人亚色综合网站 | 一区二区三区资源| 日韩少妇内射免费播放18禁裸乳| 久久亚洲国产精品尤物| 亚洲第一中文字幕| 国产探花视频在线| 在线看片欧美| 国产中文字幕日韩| 天堂在线观看视频| 亚洲欧洲国产专区| 国产黄页在线观看| 成人自拍视频| 亚洲欧美日韩天堂| 久久久国产成人| 日本91福利区| 精品国产一二| 成a人片在线观看| 在线精品视频一区二区三四| 男人的天堂免费| 成人羞羞在线观看网站| 午夜精品久久久久久99热软件| 无码人妻精品一区二区三区9厂| 国产成人亚洲综合a∨猫咪 | 一区二区不卡| 国产精品999999| 欧美一级片免费| 亚洲视频一区二区在线观看| 少妇性l交大片| 欧美精品中文| 欧美极品在线播放| 国产色综合视频| 国产精品久久久久久久久搜平片 | 国产乱一区二区| 亚洲国产欧洲综合997久久| 九色porny视频在线观看| 欧美成人高清电影在线| 秋霞欧美一区二区三区视频免费| 日韩精品一二三| 久久亚洲高清| av最新在线| 精品国产污污免费网站入口| 国产极品国产极品| 久久99精品国产.久久久久| 日韩久久久久久久久久久久久| 九色porny视频在线观看| 精品国一区二区三区| 无码黑人精品一区二区| 久久99日本精品| 日本在线视频一区| 欧美自拍电影| 亚洲精品一区在线观看香蕉| 日韩精品久久久久久久| 成人av在线网| 日韩网站在线免费观看| 福利在线一区| 国外视频精品毛片| 女人18毛片水真多18精品| 一区二区日韩av| 国产一精品一aⅴ一免费| 欧美日韩日本国产亚洲在线| 99久久精品免费看国产四区| 在线电影福利片| 欧美不卡一二三| 国产精品日日夜夜| 成人动漫一区二区| 国产中文字幕免费观看| 免费看成人吃奶视频在线| 日韩av片永久免费网站| 免费一级在线观看播放网址| 日本黄色一区二区| 99在线视频免费| 久99久精品视频免费观看| 少妇熟女一区二区| 一区二区三区国产好| 午夜精品久久久久久久久久久久久 | 三级久久三级久久| 亚洲v日韩v欧美v综合| 日韩亚洲国产免费| 久久久在线观看| 男男电影完整版在线观看| 欧美在线不卡一区| 在线免费观看亚洲视频| av电影天堂一区二区在线观看| 欧美性大战久久久久xxx| 成人在线电影在线观看视频| 国产综合视频在线观看| 国产后进白嫩翘臀在线观看视频| 日韩大片免费观看视频播放| 最新国产中文字幕| 一区二区三区四区亚洲| 亚洲永久精品ww.7491进入| 久久精品久久久精品美女| 免费网站在线观看视频| 国产在线日韩精品| 96久久精品| 少妇一区视频| 九九久久久久99精品| 丝袜视频国产在线播放| 欧美精品v国产精品v日韩精品| 国产精品99精品无码视| 国产欧美一区二区三区网站 | 伊人久久五月天| 亚洲毛片欧洲毛片国产一品色| 一本色道久久综合精品竹菊| 国产馆在线观看| av在线不卡免费看| 亚洲自拍第三页| 老司机久久99久久精品播放免费| 国产精品jizz在线观看老狼| 亚洲成在人线免费观看| 亚洲自拍偷拍福利| 欧美成人app| 97人洗澡人人免费公开视频碰碰碰| 啊v视频在线| 日韩成人黄色av| jlzzjlzzjlzz亚洲人| 在线观看日韩av先锋影音电影院| 精品亚洲永久免费| 亚洲欧洲精品天堂一级| 亚洲欧洲久久久| 99综合电影在线视频| 三级黄色片免费观看| 日本特黄久久久高潮| 黄www在线观看| 在线日韩电影| 无码人妻aⅴ一区二区三区日本| 国产欧美日韩精品一区二区三区| 国产一区在线免费观看| 亚洲三区欧美一区国产二区| 国产日韩欧美综合| 国产精品麻豆成人av电影艾秋| 97超级碰碰人国产在线观看| 日皮视频在线观看| 久久综合久久88| 77777影视视频在线观看| 亚洲欧美国内爽妇网| 婷婷伊人综合中文字幕| 精品免费视频.| www.天天干.com| 91精品国产手机| 怡春院在线视频| 欧洲日韩一区二区三区| 国产精品视频一区在线观看| 亚洲h在线观看| 日韩精品乱码久久久久久| 亚洲精品精品亚洲| 欧美在线视频第一页| 亚洲人成亚洲人成在线观看图片| 日韩福利在线视频| 中文字幕成人av| 久久免费手机视频| 国产精品久久777777| 青青草华人在线视频| 国产精品美女久久久久aⅴ| 国产三级黄色片| 国产精品三级视频| 国产精品视频看看| 亚洲乱码精品一二三四区日韩在线 | 国产精品呻吟久久| 欧美精品高清视频| 精品国产九九九| 精品人伦一区二区色婷婷| 精品国精品国产自在久不卡| 精品久久久久香蕉网| 婷婷在线观看视频| 亚洲人成电影网站| aⅴ在线视频男人的天堂| 最近2019好看的中文字幕免费 | 久久久久久亚洲| 欧美13videosex性极品| 国产成人av网| 欧美一级做a| 91手机在线观看| 欧美黑人做爰爽爽爽| 日韩成人在线资源| 先锋资源久久| 日韩五码在线观看| 久久最新视频| 在线视频观看一区二区| 国产成人免费视频一区| 手机av免费看| 亚洲欧洲一区二区在线播放| 天天干中文字幕| 福利一区福利二区微拍刺激| 丰满熟女人妻一区二区三| 欧美高清激情brazzers| 丰满肉嫩西川结衣av| 国产视频欧美视频| 麻豆影视国产在线观看| 久久久免费在线观看| 欧美黑人一区| 亚洲a区在线视频| 亚洲丁香日韩| 九九久久九九久久| 欧美一区=区| 手机精品视频在线| www..com久久爱| 国精产品一区一区| 精品magnet| 国产乱叫456在线| 亚洲跨种族黑人xxx| 91cn在线观看| 国产精品白丝jk喷水视频一区| 蜜桃精品一区二区三区| 欧美高清视频一区| 欧美日本国产| jizz18女人| 久久亚洲精品国产精品紫薇| 中文字幕电影av| 在线亚洲免费视频| 日韩在线观看视频一区| 日韩中文字幕在线观看| 伊人久久在线| 粉嫩av免费一区二区三区| 日本久久精品| 成年人视频在线免费| 成人晚上爱看视频| 顶级黑人搡bbw搡bbbb搡| 一本一本大道香蕉久在线精品 | 亚洲一区二区三区四区电影| 日韩欧美激情一区二区| 国产欧美一区二区三区国产幕精品| 亚洲av无日韩毛片久久| 国产三级欧美三级日产三级99 | 亚洲承认在线| 一级淫片在线观看| 国产区在线观看成人精品| 丰满少妇乱子伦精品看片| 日韩美一区二区三区| 黄色av电影在线观看| 国产免费成人av| 精品99在线| 国产v亚洲v天堂无码久久久| 99视频一区二区| 国产精彩视频在线观看| 91精品在线麻豆| 日本在线人成| 国产日韩中文字幕在线| 日韩综合在线| 久久久精品麻豆| 欧美激情一区在线| 亚洲色成人www永久网站| 日韩电影中文字幕| 日本在线高清| 蜜桃传媒视频麻豆一区 | 亚洲国产婷婷综合在线精品| 99久久国产热无码精品免费| 久久韩国免费视频| 色综合久久久| 日韩国产精品毛片| 国产精品一二三四五| 青娱乐国产在线视频| 欧美大片一区二区| 变态调教一区二区三区| 国产一区福利视频| 男女av一区三区二区色多| 日韩av在线看免费观看| 色琪琪一区二区三区亚洲区| 经典三级在线| 国产精品午夜视频| 五月婷婷亚洲| 免费看的av网站| 亚洲成人免费影院| 每日更新在线观看av| 国产精品成av人在线视午夜片| 久久精品国产68国产精品亚洲| 中文字幕线观看| 亚洲午夜免费福利视频| 色视频在线看| 国产欧美精品日韩| 欧美激情亚洲| 欲求不满的岳中文字幕| 色综合久久综合网欧美综合网| 国产二区在线播放| 成人日韩在线电影| 在线日本高清免费不卡| 老鸭窝一区二区| 欧美日韩专区在线| 中文字幕中文字幕在线十八区| 精品久久中出| 免费欧美在线视频| 激情五月婷婷小说| 亚洲精选一区二区| 在线免费成人| 欧洲精品一区二区三区久久| 久久亚洲一级片| 99久久婷婷国产一区二区三区 | 国产亚洲人成a在线v网站 | 日韩欧美国产一区二区在线播放| 1024在线看片你懂得| 日韩亚洲欧美精品| 国产激情一区二区三区四区| 日本三级一区二区| 久久精品美女视频网站| 天天久久夜夜| 一级黄色在线播放| 色婷婷综合久久久中文一区二区| 黄色在线播放网站| 久久亚洲午夜电影| 国产一区视频网站| 97人妻一区二区精品视频| 美女999久久久精品视频| 国产精品亚洲二区| 最新日本中文字幕| 欧美日韩大陆一区二区| 三妻四妾完整版在线观看电视剧 |