异步和多线程之间的内部差异是什么?

时间:2017-08-06 08:01:25

标签: node.js asynchronous

我曾经认为异步与多线程一样。多任务将并行完成。但是,在javascript中我写了这个,似乎永远不会发生dosomething

setTimeout(1000, dosomething)
while(true){}

为什么?

2 个答案:

答案 0 :(得分:1)

Node.js是一种single threaded异步语言。如another answer

中所述
  

Javascript是单线程的(Web工作者除外,但这与此示例无关,因此我们将忽略它)。这意味着setTimeout实际上是在至少一段时间之后安排一些代码在将来的某个时间执行,但只有当浏览器停止了当时在渲染线程上做的任何其他操作时,可能是渲染HTML,或执行JavaScript。

在你的例子中,while循环的执行永远不会停止,控制永远不会返回到顶层,因此永远不会执行预定的setTimeout函数。

答案 1 :(得分:0)

多线程是实现异步编程的众多方法之一。对事件做出反应并屈服于调度程序是另一种方式,恰好是实现javascript in the browser的方式。

在您的示例中,必须允许完成让您控制并允许您调用setTimeout的事件,以便javascript引擎可以监视超时并在其到期时调用doSomething回调。