1

最近在学校,我在并行计算课上学习了 C++/OpenMPI。我真的不喜欢用 C++ 编程,因为它的级别低,更难编程,更容易出错等。

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

或许只有node-webcl真正的平行?

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

4

2 回答 2

1

实际上,JavaScript 在设计上是单线程的。但你不是第一个想要其中一些并行性的人,所以有些东西可以真正并行工作:

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

差不多就是这样。还有WebAssembly 线程提案,但首先,它是一个提案,其次,WebAssembly 不是 JavaScript。

一般来说,JavaScript 远不是低级并行计算的最佳工具。还有很多其他工具更适合这个:Java、C#、Go...

于 2017-12-18T01:34:18.483 回答
0

使用 Node.js,您的 JavaScript 在单线程中运行。IO 是非阻塞的。

于 2012-11-22T04:05:10.010 回答