如何使用Javascript单线程& NodeJS单线程在流程执行方面有所不同

时间:2017-09-01 17:48:28

标签: javascript node.js

我正在构建MongoDB中的数据建模,它将与Nodejs一起使用。我很想了解线程如何处理Javascript中的执行流程的基本级别工作。基本上我想了解它们在Javascript和&的线程执行方面是否有任何区别。的NodeJS。 javascript是单线程的,基于v8 javascript构建的Nodej也是单线程的!在这两者之间的执行方面可能存在突破性差异。

1 个答案:

答案 0 :(得分:1)

你的问题中的术语有点混乱,因此看起来你的问题有点误导。试图比较" Javascript"到node.js真的没有意义。 node.js运行Javascript代码就好了。你真的不比较这两者。我将假设你要比较的是" Chrome浏览器中的Javascript" vs." node.js中的Javascript"。

Chrome(或任何其他浏览器)和node.js中Javascript的主要线程是单线程。它们在这方面表现相同,事实上,node.js和Chrome使用完全相同的V8 Javascript执行引擎。所有与外界或其他本机代码的协调都是通过事件队列进行的。

现代浏览器确实有webWorkers允许Javascript的其他线程,但这些线程在他们可以做的事情上(例如,他们无法访问DOM)以及他们如何与主Javascript线程进行通信(所有通信)受到非常限制是通过消息传递 - 不允许直接函数调用或共享变量。 webWorkers几乎与node.js中的单独进程一样孤立。

Chrome和node.js都有本机代码库,它们使用本机线程来实现他们的工作,但当他们与用户的Javascript代码交互时,他们都会通过事件队列,那是怎么回事它们与单线程Javascript代码连接。