当您使用Node.js时,您正在使用异步编程。
要处理层次结构,你显然会使用回调。我也知道有些函数阻塞了主事件循环,例如readFileSync()..
但是我注意到像for循环那样简单的事情也阻塞了主事件循环。
示例:
function func1() {
for(var i = 0; i < 1000000000; i++) {
}
console.log("func1")
}
function func2() {
console.log('func2')
}
func1()
func2()
在这种情况下,&#39; func1&#39;总而言之之前,打印&#39; func2&#39;并且首先完成循环。这对我来说似乎不同步。我的意思是为什么我们在运行func2之前等待func1完成?
是否有任何阻止主事件循环的动作列表,或者有人可以解释为什么会发生这种情况?
答案 0 :(得分:1)
Node.js有所谓的事件循环,它只由一个线程执行。
这个循环只需要执行任务(在你的情况下执行你的.js代码),然后这个单线程必须从头开始到结束。在这个时间没有别的将被执行。 (只需注意高级用户 - 如果你产生了工作者,你可以,但不是你通常使用Node.js的方式)
它有许多优点 - 没有死锁,确定性行为等。
因此,异步性意味着如果您启动异步任务(即请求某个Web),它不会阻止您的事件循环被执行。它被放入堆栈并等待事件循环接受它,或者如果它是一些更高级的模块,它会产生内部工作者来处理内部的东西。
但是你编写的代码总是如下: