---- 更新一下问题。
那么这种两种可能性分别在什么情况下才会发生?
我看了一下阮老师的文章,对于这个问题又有了一些的新的理解:
- 在主进程中, setTimeout 和 setImmediate 执行的先后问题,
确实,存在一个默认最小间隔为1ms的问题,那么如果 setImmediate 能够在1ms来被触发,就会比 setTimeout 快。
- 为什么在 i/o cycle 中, setImmediate 一定比 setTimeout 快?
因为在执行 i/o cycle 过程中, 进入了 poll phase,执行其 回调函数中的代码,分别遇到了 setTimeout 和 setImmediate。此时的 poll phase 的队列尚为被清空,还有一个函数在里面(执行中)。当这个函数结束的时候,整个event loop 中刚刚通过 setImmediate 注册了一个回调,所以就会继续到 check phase。 这也是为什么
Timers phase 在 check phase 前面,但是 setImmediate 却在一定会在 setTimeout 前面执行(同一i/o cycle 时)。
当然以上是我个人的理解。
在看了 @改名字很伤神 推荐的 nodejs中的event loop 后,觉得自己的基础功还是不扎实,没有办法更加深入的去理解问题,汗颜。
同时,欢迎大家就我的看法做指正。
那当然,你都没法保证是不是同一次轮询(你可能是问这个?)。这就是为什么后面要加
fs.readFile
。