javascript - JavaScript/NodeJS 真的是并行的吗?

标签 javascript node.js parallel-processing

最近在学校,我在并行计算类(class)中学习了 C++/OpenMPI。我不太喜欢用 C++ 编程,因为它的水平较低,更难编程,更容易犯错误等。

所以我一直在想,JavaScript/NodeJS(我开始喜欢的东西)真的是真正的并行吗?或者只是使用非阻塞操作来模拟并行执行(我认为是这样)?有像 async 这样的库它提供了与我在 OpenMPI 中使用的类似的功能:聚集、分散甚至“并行”。但我有一种感觉,它只是使用非阻塞 IO 来模拟并行性?

也许只有node-webcl真的是平行的吗?

更新:似乎可以通过网络工作人员(约 31 分钟):观看 http://www.infoq.com/presentations/Parallel-Programming-with-Nodejs

最佳答案

事实上,JavaScript 的设计是单线程的。但您并不是第一个想要并行性的人,因此有些事情可以真正并行工作:

  1. WebWorkers - 在线程中运行,这意味着它们的创建成本非常低。它们的数据交换能力有限。起初,你只能在worker之间发送消息,但现在它们好多了,你甚至可以使用SharedArrayBuffer用于并发内存访问。 NodeJ 不支持,仅在浏览器中支持。
  2. WebGL/WebCL - 利用图形子系统进行并行计算。非常快,但对有限的问题有效。并非所有任务都可以在类似 GPU 的子系统上有效计算。它还需要额外的数据转换才能以类似像素的格式呈现数据。具有像 WebGL 一样良好的浏览器支持,但正如您已经提到的,只有 NodeJs 的实验性实现。
  3. SIMD - 数据并行性。这是一件很有前途的事情,但它不再出现在 JavaScript 的路线图上,它将成为 WebAssembly 的一部分。标准。
  4. Cluster - NodeJs 并行解决方案。允许运行多个进程(不是线程),甚至支持 SharedArrayBuffer从第 9 版开始用于通信。

差不多就这些了。还有WebAssembly threads proposal ,但是,首先,这是一个提案,其次,WebAssembly 不是 JavaScript。

总的来说,JavaScript 到目前为止还不是低级并行计算的最佳工具。还有很多其他工具更适合此目的:Java、C#、Go...

关于javascript - JavaScript/NodeJS 真的是并行的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13505724/

相关文章:

javascript - Chromecast 接收器应用程序 - 意外命令,播放器处于 IDLE 状态

javascript - docker 中出错(找不到我导出的模块),运行 npm start 时不是问题

Node.js 的 npm 安装了错误的包

javascript - 加载内容脚本中使用的库

javascript - 按键事件未记录第一个按键

javascript - 如何在 JavaScript 中调用 "lexical this"或箭头语法?

node.js - 是否可以将文件夹从容器挂载到主机?

c# - 多线程 'fixed'

hadoop - 如何保证MapReduce任务之间相互独立?

c++ - CUDA:每个 GPU 线程上的 Runge-Kutta 轨迹