在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 一個(gè) nodejs event loop 中不同 階段的順序問題。

一個(gè) nodejs event loop 中不同 階段的順序問題。

The Node.js Event Loop, Timers, and process.nextTick() 文章中介紹了 event loop

的概念和其分別的幾個(gè)階段(phase)

  1. close callbacks
  2. check
  3. poll
  4. idle,prepare
  5. pending callbacks
  6. timers

結(jié)合文章中給出的示意圖

clipboard.png

我理解的執(zhí)行順序是:

 1 -> 2 -> 3 -> 4 -> 5 -> 6
 

但是在隨后文中的描述

clipboard.png

似乎表達(dá)的相反的執(zhí)行順序:

6 -> 5 -> 4 -> 3 -> 2-> 1

但是因?yàn)樵谕粋€(gè) i/o cycle 中

// timeout_vs_immediate.js
const fs = require('fs');

fs.readFile(__filename, () => {
  setTimeout(() => {
    console.log('timeout');
  }, 0);
  setImmediate(() => {
    console.log('immediate');
  });
});
// immediate 總是在 timeout 前面完成
$ node timeout_vs_immediate.js
immediate
timeout

$ node timeout_vs_immediate.js
immediate
timeout

那么到底這些階段有沒有優(yōu)先級順序?如果有?何種為正確的?文檔中描述和圖示是否有沖突?(就是我對于英語

的理解是否存在問題?)

回答
編輯回答
法克魷

一知半解也不好回答你,畢竟沒讀過源碼,這篇文章應(yīng)該是你需要的內(nèi)容。
nodejs中的event loop

以下為文章poll源碼中與問題相關(guān)部分的兩行代碼

    while (!QUEUE_EMPTY(&loop->watcher_queue)) {

    //阻塞直到監(jiān)聽的事件來臨,前面已經(jīng)算好timeout以防uv_loop一直阻塞下去
    if (no_epoll_wait != 0 || (sigmask != 0 && no_epoll_pwait == 0)) {
2018年9月9日 18:24