Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript/NodeJS真的是并行的吗?_Javascript_Node.js_Parallel Processing - Fatal编程技术网

JavaScript/NodeJS真的是并行的吗?

JavaScript/NodeJS真的是并行的吗?,javascript,node.js,parallel-processing,Javascript,Node.js,Parallel Processing,最近在学校,我在一堂并行计算课上学习了C++/OpenMPI。我不喜欢C++编程,因为它的低水平,程序难,容易出错等。 所以我一直在想,JavaScript/NodeJS(我开始喜欢的东西)真的是并行的吗?或者只是使用非阻塞操作来模拟并行执行(我认为是这样的)?有这样的库,它提供了类似于我在OpenMPI中使用的函数:聚集、分散甚至“并行”。但我有一种感觉,它只是使用非阻塞IO模拟并行性 也许只有真正的平行 更新:似乎可以通过web workers(~31分钟):通过Node.js观看,Java

最近在学校,我在一堂并行计算课上学习了C++/OpenMPI。我不喜欢C++编程,因为它的低水平,程序难,容易出错等。 所以我一直在想,JavaScript/NodeJS(我开始喜欢的东西)真的是并行的吗?或者只是使用非阻塞操作来模拟并行执行(我认为是这样的)?有这样的库,它提供了类似于我在OpenMPI中使用的函数:聚集、分散甚至“并行”。但我有一种感觉,它只是使用非阻塞IO模拟并行性

也许只有真正的平行


更新:似乎可以通过web workers(~31分钟):通过Node.js观看

,JavaScript在单个线程中运行。IO是非阻塞的。

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

事实上,JavaScript的设计是单线程的。但你并不是第一个想让它有平行性的人,所以有些东西可以真正平行:

  • -在线程中运行,这意味着它们的创建成本非常低。他们的数据交换能力有限。起初,您只能在工作人员之间发送消息,但现在它们好多了,您甚至可以用于并发内存访问。NodeJs中不支持,仅在浏览器中支持
  • -利用图形子系统进行并行计算。非常快,但对有限的一组问题有效。并非所有任务都能在类似GPU的子系统上有效地计算。它还需要额外的数据转换,以便以类似像素的格式显示数据。有相当好的浏览器支持WebGL,但正如您已经提到的,它只有针对NodeJ的实验性实现
  • -数据的并行性。这是一件有希望的事情,但它不再是JavaScript的路线图,它将成为标准的一部分
  • -用于并行性的NodeJs解决方案。允许运行多个进程(非线程),甚至支持自第9版以来的通信
  • 差不多就是这样。还有,但是,首先,它是一个提议,其次,WebAssembly不是JavaScript


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

    事实上,JavaScript的设计是单线程的。但你并不是第一个想让它有平行性的人,所以有些东西可以真正平行:

  • -在线程中运行,这意味着它们的创建成本非常低。他们的数据交换能力有限。起初,您只能在工作人员之间发送消息,但现在它们好多了,您甚至可以用于并发内存访问。NodeJs中不支持,仅在浏览器中支持
  • -利用图形子系统进行并行计算。非常快,但对有限的一组问题有效。并非所有任务都能在类似GPU的子系统上有效地计算。它还需要额外的数据转换,以便以类似像素的格式显示数据。有相当好的浏览器支持WebGL,但正如您已经提到的,它只有针对NodeJ的实验性实现
  • -数据的并行性。这是一件有希望的事情,但它不再是JavaScript的路线图,它将成为标准的一部分
  • -用于并行性的NodeJs解决方案。允许运行多个进程(非线程),甚至支持自第9版以来的通信
  • 差不多就是这样。还有,但是,首先,它是一个提议,其次,WebAssembly不是JavaScript


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

    嗯,NodeJS是单线程的,所以它不是真正的并行?意味着它不能从多核中获益?但我想我仍然可以使用分布式系统(比如云)?我想他说的是,在任何意义上都不是并行的。这是正确的。No.js管理引擎下的IO和其他异步操作的一些线程(如果你写一个C++扩展,你可以访问它们),但是为了利用JavaScript代码中的多个内核,你需要运行多个进程,或者使用一个为你创建线程的模块(通过C++)。所以这不是真正的平行?意味着它不能从多核中获益?但我想我仍然可以使用分布式系统(比如云)?我想他说的是,在任何意义上都不是并行的。这是正确的。No.js管理引擎下的IO和其他异步操作的一些线程(如果你写了一个C++扩展,你可以访问它们),但是为了利用JavaScript代码中的多个内核,你需要运行多个进程,或者使用一个为你创建线程的模块(通过C++)。Node.js或Python twisted framework等东西之所以流行,是因为事实证明,对于Web服务器所经历的各种负载(每个客户端有多个连接、小数据包、5秒钟内的响应等),多线程和多处理已经得到了证明(在现实世界中)要比多路复用、非阻塞I/O慢得多。尤其是当线程数超过CPU核数时(这是繁忙网站的典型情况)。从web服务器问题的历史角度来看:Node.js或Python twisted framework等流行的原因可能是重复的,因为事实证明,对于web服务器所经历的各种负载(每个客户端的多个连接、小数据包、不到5秒的响应等)多线程和多处理已被证明(在现实世界中)比多路复用、非阻塞I/O慢得多。特别是当您的线程数超过CPU内核数时(这是繁忙网站的典型情况)。Se