Philip Roberts出色地解释了浏览器事件循环,从而在调用堆栈,事件循环,任务队列以及诸如webapis之类的“外部”线程之间提供了清晰的解释。我的问题是,这些事件是否与Node事件循环中的等效组件并行运行,并且它们被称为基本相同的东西。也就是说,当我使用Node的文件库和Web I / O库进行调用时,这些是发生在堆栈外部的事情,其回调在任务队列中排队吗?
...当我使用Node的文件和Web I / O库进行调用时,这些是发生在堆栈外部的事件,其回调在任务队列中排队吗?
是的,一点没错; 它们像Ajax一样setTimeout
是异步的,并且是异步的。他们在调用堆栈之外执行一些操作,完成该操作后,便将事件添加到队列中,以供事件循环处理。
Node的API提供了一种异步no-op setImmediate
。对于该功能,我上面提到的“某些操作”是“不执行任何操作”,此后立即将一项添加到事件队列的末尾。
还有一个更强大的功能process.nextTick
,它可以将事件添加到事件队列的最前面,从而有效地排成一行,并使所有其他排队的事件等待。如果以递归方式调用,则可能导致其他事件(直到到达maxTickDepth
)的延迟。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句