亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

Node.js Event Loop各階段講解

2024-05-06 16:48:51
字體:
來源:轉載
供稿:網友

Event Loop階段描述圖

Node.js,Event,Loop

timers

timer階段處理setTimeout于setInterval回調,開始處理的時機與poll階段有關聯。

pending callbacks

該階段執行某些系統操作的回調,比如TCP套接字在連接時收到ECONNREFUSED。

網上有一些將該階段稱為I/O callbacks的文章都是過時錯誤的,具體可以移步Node.js官方庫下面的這個issue: #1118。

idle, prepare

內部使用,忽略。

poll

poll是一個核心階段,等新I/O事件的觸發,以及執行I/O相關回調。Node.js中出現異步的絕大部分情況都是I/O操作,它們的回調基本都在這個階段被執行。

poll階段主要做兩件事:

  • 計算需要為新的的I/O事件等待多久

當進入poll階段,如果隊列為空且不存在setImmediate與就緒的timer,Node.js會在這里block一定的時間等待新的I/O事件到來,然后立即執行其回調。這種情況具體block等待多久是不具體的,但如果在block一定時間后仍沒有新到達的I/O事件,可以肯定循環依舊會進入check階段或者回到timer階段。

  • 處理該階段隊列中的事件

當進入poll階段,如果隊列不為空且沒有就緒的timer,Node.js會在這里執行隊列中的callback直到隊列為空或者執行的callback數達到系統設定的某個值。隨后Node.js檢查是否存在預設的setImmediate,存在話就進入check階段,否則開始檢查timer就緒情況選擇回到timer階段或者進入check階段。

對于poll階段,通過閱讀官方的文檔有些細節也沒弄清楚,用偽代碼表示出來:

enter pool phase:if (has timer scheduled) {  // 官方沒有提到這種情況會做什么}else {  if (isEmpty(queue)) {    if (has(setImmediate)) {      // 進入check階段    }    else if (!isEmpty(timer)) {      // 回到timer階段    }    else {      // 等待新的I/O事件      // 新的I/O事件觸發回調立即執行,執行完成之后的邏輯不清楚    }    // 目前看來只有存在setImmediate時才會進入check階段,這肯定不合理  }  if (!isEmpty(queue)) {    let result = execute(queue);    if (result === 'queue is empty') {      // 官方沒講后續邏輯      // 猜測是回到隊列為空的處理邏輯中    }    if (result === 'reached hard limit') {      // 官方沒有解釋這里的后續邏輯      // 也許與queue is empty一樣對待    }  }}

疑惑重點是從poll階段出來的時機以及去向不是非常明確,但以我目前的水平和精力只能到此為止。

check

當poll階段執行完成會進入到check階段執行,該階段的執行內容是所有setImmediate回調。

close callbacks

socket的異常關閉,'close'事件的回調會在該階段執行。

process.nextTick

process.nextTick經常被用來做異步調用,但它并不屬于事件循環的內容,process.nextTick中的回調被放在nextTickQueue中等待“當前操作”完成后被立即處理,與事件循環中的階段沒有聯系,當前操作的原文定義是:“An operation is defined as a transition from the underlying C/C++ handler, and handling the JavaScript that needs to be executed.”,指的是在一段Javascript代碼執行完切換到C/C++層時會處理nextTickQueue。

文章提到了一個特例是Deduplication,這是Node.js內部一個優化特性,當在timer和check階段,同時有多個需要執行的回調時,切換只會發生一次,所以nextTick回調執行在這種情況下看似有所延后。

代碼示例:

setImmediate(() => {  console.log('1');  process.nextTick(() => console.log('2'));});setImmediate(() => {  console.log('3');  process.nextTick(() => console.log('4'));});

存在兩個setImmediate,進入check階段后需要在執行所有setImmediate的回調代碼后才會產生切換,從而執行nextTick回調,因此上面代碼的運行結果是:“1 3 2 4”,除上述場景外,nextTick都會先于setImmediate執行。

總結

因為Node.js的Event Loop我看了有那么2、3回,但經常忘,所以這次記錄下來,做個備忘。由于太多知識容易忘記,又發現寫文章的一個優點:“幫助記憶便于復習”。

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩视频永久免费观看| 在线电影中文日韩| 欧美激情三级免费| 国产精品美女www| 亚洲精品少妇网址| 日韩av高清不卡| 国产mv免费观看入口亚洲| 久久91亚洲精品中文字幕| 91久久精品日日躁夜夜躁国产| 国内精品久久久久伊人av| 国产精品www| 正在播放国产一区| 九九热最新视频//这里只有精品| 色播久久人人爽人人爽人人片视av| 九色91av视频| 久久久www成人免费精品| 91精品国产综合久久久久久久久| 中文字幕欧美精品日韩中文字幕| 米奇精品一区二区三区在线观看| 欧洲中文字幕国产精品| 菠萝蜜影院一区二区免费| 91精品国产色综合久久不卡98口| 亚洲国产高清福利视频| 久久精品国产91精品亚洲| 98视频在线噜噜噜国产| 国内外成人免费激情在线视频网站| 69久久夜色精品国产69乱青草| 亚洲综合色av| 亚洲xxxx视频| 日韩欧美国产骚| 亚洲xxxx视频| 国产在线视频2019最新视频| 国产成人精品午夜| 成人av在线亚洲| 国内精品视频在线| 国产精品自产拍高潮在线观看| 亚洲欧美999| 91av在线免费观看| 91精品国产乱码久久久久久久久| 日韩综合中文字幕| 亚洲va欧美va国产综合久久| 日韩精品视频中文在线观看| 国产精品午夜一区二区欲梦| 黑人巨大精品欧美一区二区免费| 亚洲老板91色精品久久| 亚洲最大成人在线| 96精品视频在线| 色久欧美在线视频观看| 日韩欧美一区二区三区久久| 国产有码一区二区| 欧美成人免费在线视频| 亚洲a成v人在线观看| 国产精品久久久久久久电影| 一本色道久久88综合日韩精品| 久久久精品视频在线观看| 欧美老少做受xxxx高潮| 日韩精品在线免费| 久久精品久久久久久| 91欧美精品午夜性色福利在线| 国产有码在线一区二区视频| 亚洲欧美在线x视频| 日韩有码视频在线| 国产一区二区丝袜高跟鞋图片| 欧美中在线观看| 日韩欧美高清视频| 欧美高清视频在线| 亚洲电影免费观看高清| 日韩成人在线视频网站| 国内精品伊人久久| 亚洲精品欧美一区二区三区| 一个人看的www久久| 国产日韩欧美视频在线| 欧美黄色片在线观看| 91精品免费看| 国产精品h在线观看| 98视频在线噜噜噜国产| 大伊人狠狠躁夜夜躁av一区| 亚洲图中文字幕| 一区二区三区视频免费| 日韩一区二区三区国产| 亚洲人成网在线播放| 久久97久久97精品免视看| 欧美一级大片视频| 国产精品香蕉在线观看| 国产精品视频永久免费播放| 一区二区三区视频免费| 亚洲男人天堂网| 亚洲韩国青草视频| 欧美人在线观看| 6080yy精品一区二区三区| 成人观看高清在线观看免费| 日韩一区二区三区国产| 日韩欧美精品在线观看| 欧美午夜精品久久久久久浪潮| 国产一区二区三区18| 欧美性猛交丰臀xxxxx网站| 日韩精品视频三区| 青草青草久热精品视频在线观看| 欧美日韩在线视频首页| 亚洲成人在线网| 亚洲日本中文字幕| 亚洲福利视频专区| 欧美日韩国产第一页| 亚洲精品福利视频| 亚洲在线免费看| 国产一区二区丝袜高跟鞋图片| 久久国产视频网站| 成人综合国产精品| 大伊人狠狠躁夜夜躁av一区| 久久久久国产精品免费| 久久99热精品| 欧美美女操人视频| 久久久久久网站| 亚洲自拍偷拍福利| 日韩久久免费视频| 日韩中文字幕第一页| 久久成人免费视频| 色偷偷偷综合中文字幕;dd| 97精品国产97久久久久久春色| 2019中文字幕免费视频| 国产香蕉97碰碰久久人人| 亚洲成人性视频| 欧美国产日韩一区二区三区| 亚洲精品永久免费精品| 92版电视剧仙鹤神针在线观看| 国产精品揄拍500视频| 欧美国产日本在线| 亚洲男女自偷自拍图片另类| 亚洲精品不卡在线| 欧美性xxxxx极品娇小| 欧美激情精品久久久久久久变态| 亚洲aaaaaa| 欧美激情在线观看视频| 亚洲男人7777| 亚洲精品有码在线| 国产欧美一区二区三区在线| 亚洲国产精品成人一区二区| 欧美精品久久久久a| 亚洲xxxx做受欧美| 亚洲高清在线观看| 97视频在线观看免费| 欧美性生活大片免费观看网址| 国产精品成人播放| 欧美性生交大片免费| 欧美成人第一页| 久久网福利资源网站| 日韩美女视频免费在线观看| 色爱精品视频一区| 亚洲精品一区二区在线| 欧美专区日韩视频| 国产日韩欧美日韩大片| 欧美日韩一区二区免费在线观看| 亚洲系列中文字幕| 日韩中文字幕亚洲| 欧美日韩国产丝袜美女| 97国产一区二区精品久久呦| 亚洲精品欧美日韩专区| 亚洲色图第三页| 成人欧美一区二区三区在线湿哒哒| 亚洲欧美日韩区| 国产成人精品综合| 91精品综合久久久久久五月天| 伊人伊成久久人综合网小说| 91av视频在线|