为了账号安全,请及时绑定邮箱和手机立即绑定

一个 nodejs event loop 中不同 阶段的顺序问题。

一个 nodejs event loop 中不同 阶段的顺序问题。

MM们 2019-03-19 17:13:23
在 The Node.js Event Loop, Timers, and process.nextTick() 文章中介绍了 event loop的概念和其分别的几个阶段(phase)close callbackscheckpollidle,preparepending callbackstimers结合文章中给出的示意图我理解的执行顺序是: 1 -> 2 -> 3 -> 4 -> 5 -> 6但是在随后文中的描述似乎表达的相反的执行顺序:6 -> 5 -> 4 -> 3 -> 2-> 1但是因为在同一个 i/o cycle 中// timeout_vs_immediate.jsconst fs = require('fs');fs.readFile(__filename, () => {  setTimeout(() => {    console.log('timeout');  }, 0);  setImmediate(() => {    console.log('immediate');  });});// immediate 总是在 timeout 前面完成$ node timeout_vs_immediate.jsimmediatetimeout$ node timeout_vs_immediate.jsimmediatetimeout那么到底这些阶段有没有优先级顺序?如果有?何种为正确的?文档中描述和图示是否有冲突?(就是我对于英语的理解是否存在问题?)
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

一知半解也不好回答你,毕竟没读过源码,这篇文章应该是你需要的内容。
nodejs中的event loop

以下为文章poll源码中与问题相关部分的两行代码

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


    //阻塞直到监听的事件来临,前面已经算好timeout以防uv_loop一直阻塞下去

    if (no_epoll_wait != 0 || (sigmask != 0 && no_epoll_pwait == 0)) {


查看完整回答
反对 回复 2019-04-04
  • 1 回答
  • 0 关注
  • 462 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信