setImmediate 表示立即执行,它是宏任务,回调函数会被会放置在事件循环的 check 阶段。
在应用中如果有大量的计算型任务,它是不适合放在主线程中执行的,因为计算任务会阻塞主线
程,主线程一旦被阻塞,其他任务就需要等待,所以这种类型的任务最好交给由 C++ 维护的线程去
执行。
可以通过 setImmediate 方法将任务放入事件循环中的 check 阶段,因为代码在这个阶段执行不会
阻塞主线程,也不会阻塞事件循环。
function sleep(delay) {
var start = new Date().getTime()
while (new Date().getTime() - start < delay) {
continue
}
console.log(“ok”)
}
console.log(“start”)
sleep(2000)
console.log(“end”)
console.log(“start”)
setImmediate(sleep, 2000)
console.log(“end”)
结论:Node **适合 I/O 密集型任务,不适合 CPU 密集型任务,因为主线程一旦阻塞,程序就卡主了。**