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

首頁 > 編程 > JavaScript > 正文

Node.js Event Loop各階段講解

2019-11-19 12:01:05
字體:
來源:轉載
供稿:網友

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回,但經常忘,所以這次記錄下來,做個備忘。由于太多知識容易忘記,又發現寫文章的一個優點:“幫助記憶便于復習”。

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。如果你想了解更多相關內容請查看下面相關鏈接

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线亚洲男人天堂| 国产在线精品一区免费香蕉| 国产精品电影观看| 欧美成年人视频网站| 国产91ⅴ在线精品免费观看| 久久免费高清视频| 色www亚洲国产张柏芝| 久热在线中文字幕色999舞| 国产精品视频网| 亚洲精品电影久久久| 夜夜嗨av色一区二区不卡| 毛片精品免费在线观看| 精品国偷自产在线视频99| 久久全球大尺度高清视频| 国模精品视频一区二区三区| 亚洲一级黄色片| 国产精品视频不卡| 精品国偷自产在线| 亚洲精品久久久久中文字幕二区| 久久综合久久八八| 日韩精品有码在线观看| 国产69久久精品成人| 国产丝袜一区二区三区免费视频| 久久在线精品视频| 久久久精品国产网站| 久久精品视频在线播放| 欧美日韩中文在线观看| 欧美大尺度激情区在线播放| 精品视频在线播放色网色视频| 亚洲一区二区三区sesese| 国产欧美在线观看| 日韩性生活视频| 国产精品自拍偷拍视频| 亚洲图片在区色| 午夜精品一区二区三区av| 国产精品r级在线| 日韩精品免费在线播放| 欧美一区二区三区免费视| 美女av一区二区三区| 亚洲精品白浆高清久久久久久| 亚洲美女www午夜| 久久久久久久久久久久av| 最近2019年好看中文字幕视频| 在线免费看av不卡| 中文字幕日韩在线观看| 91久久久久久久久久久| 性夜试看影院91社区| 国产不卡精品视男人的天堂| 欧美特黄级在线| 欧美成人三级视频网站| 奇门遁甲1982国语版免费观看高清| 欧美午夜美女看片| 久久精品99久久香蕉国产色戒| 国产精品午夜国产小视频| 欧美激情精品久久久久久黑人| 欧美精品久久久久久久免费观看| 亚洲无限av看| 97香蕉久久超级碰碰高清版| 麻豆成人在线看| 91香蕉嫩草神马影院在线观看| 色综合久久88色综合天天看泰| 97久久精品人人澡人人爽缅北| 国产成人在线视频| 国产成+人+综合+亚洲欧洲| 538国产精品一区二区免费视频| 欧美另类老女人| 欧美最猛性xxxxx(亚洲精品)| 狠狠综合久久av一区二区小说| 成人午夜在线影院| 欧美国产中文字幕| 日韩av理论片| 日韩精品中文字幕在线播放| 91美女片黄在线观| 欧美日韩性视频在线| 日韩有码视频在线| 中文字幕免费精品一区| 欧美精品video| 国产精品一区=区| 97视频网站入口| 国产免费一区二区三区香蕉精| 插插插亚洲综合网| 久久精品美女视频网站| 久久久欧美一区二区| 亚洲欧洲激情在线| 欧美日韩一区二区免费在线观看| 日韩高清有码在线| 亚洲精品欧美日韩| 久久777国产线看观看精品| 丝袜一区二区三区| 国产精品亚洲自拍| 久久天天躁夜夜躁狠狠躁2022| 国产精品久久久久久久久久久久| 国产一区二区三区丝袜| 欧美亚洲一级片| 国产欧美一区二区三区久久人妖| 青草青草久热精品视频在线观看| 欧美国产日韩一区二区三区| 欧美午夜www高清视频| 法国裸体一区二区| 日本精品一区二区三区在线| 欧美性猛交xxxx富婆弯腰| 欧美极品美女电影一区| 日韩av影视综合网| 成人免费观看49www在线观看| 91手机视频在线观看| 亚洲第一免费网站| 日韩精品极品视频免费观看| 欧美日韩爱爱视频| 国产欧亚日韩视频| 日本免费一区二区三区视频观看| 日韩中文字幕网址| 亚洲已满18点击进入在线看片| 久久久999国产| 欧美自拍视频在线观看| 欧美日韩激情网| 国产成人在线亚洲欧美| 国产精品欧美一区二区三区奶水| 欧美激情一区二区三区高清视频| 国产精品老牛影院在线观看| 欧美日韩高清在线观看| 久久久国产一区| 日本成人黄色片| 欧美成人亚洲成人日韩成人| 日韩中文理论片| 97香蕉超级碰碰久久免费软件| 国产精品美女久久久久久免费| 国产精品视频导航| 久久99精品久久久久久噜噜| 亚洲成人黄色在线观看| 中文字幕无线精品亚洲乱码一区| 青青草原一区二区| 成人av色在线观看| 国产欧美精品在线| 国产精品午夜一区二区欲梦| 亚洲伊人第一页| 66m—66摸成人免费视频| 成人a在线视频| 亚洲欧美国产视频| 亚洲国产精品中文| 国产一区二区三区四区福利| 国产日韩欧美夫妻视频在线观看| 亚洲欧美日本伦理| 成人免费看片视频| 国产v综合ⅴ日韩v欧美大片| 国产精品成人v| 国产精品自拍网| 欧美激情一级精品国产| 久久天天躁狠狠躁夜夜av| 国产美女搞久久| 91极品女神在线| 国产精品视频yy9099| 成人444kkkk在线观看| 精品毛片三在线观看| 欧美日韩亚洲成人| 亚洲欧美日本伦理| 亚洲人av在线影院| 亚洲高清免费观看高清完整版| 亚洲一区二区久久久久久久| 成人免费激情视频| 人人澡人人澡人人看欧美| 欧美日韩国产页| 精品久久久一区| 欧美成人h版在线观看| 亚洲网站在线观看|