chrome浏览器事件循环与节点事件循环之间是否存在显着差异?

Philip Roberts在解释浏览器事件循环方面做得非常出色,在调用堆栈,事件循环,任务队列和webapis之类的“外部”线程之间提供了一个清晰的解释。 我的问题是做这些并行在Node事件循环等价的组件,他们被称为基本相同的东西。 也就是说,当我使用Node的文件和Web I / O库进行调用时,这些事件发生在堆栈之外,其callback在一个任务队列中排队?

…当我使用Node的文件和Web I / O库进行调用时,这些事件发生在堆栈之外,其callback在任务队列中排队?

是的,一点没错; 它们就像Ajax和setTimeout是asynchronous的。 他们在调用堆栈之外执行一些操作,当他们完成这个操作时,他们将一个事件添加到队列中,以便由事件循环处理。

Node的API提供了一种asynchronous无操作setImmediate 。 对于这个函数,上面提到的“某些操作”是“什么都不做”,之后立即将一个项目添加到事件队列的末尾。

还有一个更强大的process.nextTick ,它将一个事件添加到事件队列的前面 ,从而有效地切入并排队等待事件。 如果recursion调用,则可能导致其他事件延迟(直到达到maxTickDepth )。