Javascript NodeJS是单线程的-在无限循环的情况下仍然不会阻塞
我对NodeJS是如何非阻塞的感到困惑,即使它是单线程平台。特别是,在这段代码中,我有两个回调,其中一个包含无限循环。它从不显示预期的输出,在我的例子中是“thread2”,但它会以指定的间隔继续执行下一个回调,在我看来,这与单线程应用程序的事实不符。如有任何澄清,将不胜感激Javascript NodeJS是单线程的-在无限循环的情况下仍然不会阻塞,javascript,node.js,multithreading,Javascript,Node.js,Multithreading,我对NodeJS是如何非阻塞的感到困惑,即使它是单线程平台。特别是,在这段代码中,我有两个回调,其中一个包含无限循环。它从不显示预期的输出,在我的例子中是“thread2”,但它会以指定的间隔继续执行下一个回调,在我看来,这与单线程应用程序的事实不符。如有任何澄清,将不胜感激 setInterval(()=>console.log('thread1'),1000); setInterval(()=>函数(){ console.log('thread2'); while(true){} }, 5
setInterval(()=>console.log('thread1'),1000);
setInterval(()=>函数(){
console.log('thread2');
while(true){}
}, 500);
console.log('starting')代码>
这是一个lambda表达式(()=>
),它返回一个函数(后面的值)。你从来没有真正调用过这个函数
这是一个lambda表达式(()=>
),它返回一个函数(后面的值)。你从来没有真正调用过这个函数。我花了一分钟才弄明白为什么会这样。如果您给出一个没有任何箭头函数的示例,可能会更清楚。明白了!这是一个简单的错误。它现在的工作情况和预期的一样。谢天谢地,我花了一分钟才弄明白为什么会这样。如果您给出一个没有任何箭头函数的示例,可能会更清楚。明白了!这是一个简单的错误。它现在的工作情况和预期的一样。感谢如果希望函数体被setInterval()
调用,请从上述代码中删除“function()”
字符。然后,它将进入无限循环,而不会有任何进展。您并没有像现在这样调用无限循环。实际上,您有一个由setInterval()
调用的arrow函数,但它所做的只是返回另一个从未调用过的函数。这看起来像是一个箭头函数输入错误,碰巧没有产生语法错误。一旦开始在内部函数中执行代码,您将看到预期的无限循环。如果希望函数体由setInterval()调用,请从上述代码中删除“function()”
字符。然后,它将进入无限循环,而不会有任何进展。您并没有像现在这样调用无限循环。实际上,您有一个由setInterval()
调用的arrow函数,但它所做的只是返回另一个从未调用过的函数。这看起来像是一个箭头函数输入错误,碰巧没有产生语法错误。一旦开始在内部函数中执行代码,就会看到预期的无限循环。
() => function() {
console.log('thread2');
while (true) {}
}