【问题标题】:How working of Javascript Single thread & NodeJS single thread differs in terms of flow executionJavascript 单线程和 NodeJS 单线程在流执行方面的工作方式有何不同
【发布时间】:2017-09-02 02:07:07
【问题描述】:

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

【问题讨论】:

  • Javascript 是一种语言,Node 是运行这种语言的引擎。
  • @JeremyThille 要学究 Node 是环境,V8 是 JS 引擎
  • 我试图简化事情:)
  • 我认为这些都不重要。要点是您的脚本在一个线程中运行,但它确实允许可以以异步方式执行的外部调用,并在完成时调用回调。如果您确实想深入了解,Node、Chrome 浏览器,甚至 MongoDB 都在使用Google's V8 JavaScript engine,,而且它们的运行方式可能非常相似。

标签: javascript node.js


【解决方案1】:

您问题中的术语有些混乱,因此您的问题似乎有点误导。试图将“Javascript”与 node.js 进行比较并没有什么意义。 node.js 运行 Javascript 代码就好了。你并没有真正将两者进行比较。我假设您要比较的是“Chrome 浏览器中的 Javascript”与“node.js 中的 Javascript”。

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

现代浏览器确实有 webWorkers 允许额外的 Javascript 线程,但是这些线程在它们可以做什么(例如,它们不能访问 DOM)以及它们如何与主 Javascript 线程通信(所有通信是通过消息传递 - 不允许直接函数调用或共享变量)。 webWorkers 几乎与 node.js 中的单独进程一样孤立。

Chrome 和 node.js 都有本地代码库,它们使用本地线程来实现它们的工作,但是当它们与用户的 Javascript 代码交互时,它们都经过事件队列,这就是它们与单线程 Javascript 代码连接的方式.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2012-04-25
    • 2021-02-20
    • 2016-10-01
    相关资源
    最近更新 更多