在 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)) {
添加回答
举报
0/150
提交
取消