是什么阻止Node.js异步
当您使用Node.js时,您使用的是异步编程 为了处理层次结构,您显然使用回调。我还知道一些函数正在阻塞主事件循环,例如readFileSync() 但我注意到,即使像for循环这样简单的东西也会阻塞主事件循环 例如:是什么阻止Node.js异步,node.js,loops,asynchronous,synchronous,event-loop,Node.js,Loops,Asynchronous,Synchronous,Event Loop,当您使用Node.js时,您使用的是异步编程 为了处理层次结构,您显然使用回调。我还知道一些函数正在阻塞主事件循环,例如readFileSync() 但我注意到,即使像for循环这样简单的东西也会阻塞主事件循环 例如: function func1() { for(var i = 0; i < 1000000000; i++) { } console.log("func1") } function func2() { console.log('func2')
function func1() {
for(var i = 0; i < 1000000000; i++) {
}
console.log("func1")
}
function func2() {
console.log('func2')
}
func1()
func2()
函数func1(){
对于(变量i=0;i<100000000;i++){
}
console.log(“func1”)
}
函数func2(){
console.log('func2')
}
func1()
func2()
在这种情况下,“func1”将始终在“func2”之前打印,并在循环完成时首先打印。这对我来说似乎不是异步的。我是说为什么我们要等到func1完成后再运行func2
是否有任何阻止主事件循环的操作列表,或者有人可以解释为什么会发生这种情况?Node.js有所谓的事件循环,它仅由一个线程执行 这个循环只需要执行任务(在您的例子中是执行.js代码),然后这一个线程必须从头到尾执行。在这段时间内,不会执行任何其他操作。 (只需注意高级用户——如果您生成了worker,您可以,但这不是您通常使用Node.js的方式) 它有许多优点-无死锁、确定性行为等 因此,异步性意味着,如果启动一个异步任务(即对某个web的请求),它不会阻止要执行的事件循环。它要么被放入堆栈并在事件循环接收它时等待,要么如果它是某个更高级的模块,它在内部生成worker来处理内部的某些内容 但是,您编写的代码始终如下所示:
- 从事件循环堆栈中获取任务
- 从头到尾执行所有同步上下文
- 将所有异步任务放入堆栈
- 重复这个过程