有没有办法在NodeJS中做multithreading编码?

根据我的理解,只有NodeJS中的I / O是非阻塞的。 例如,如果我们做了很多沉重的math操作,其他用户在完成之前无法访问服务器。

我想知道是否有一个非阻塞的方式来做在NodeJS繁重的计算? 只是好奇。

如果您想要使用Node进行长时间的计算,那么您将需要启动一个单独的进程来处理这些计算。 一般来说,这可以通过创build一些单独的工作进程并将计算结果传递给他们来完成。 通过这样做,您可以保持主节点事件循环畅通无阻。

在实现方面,你有两个主要的select。

  1. 首先是使用Node的subprocessAPI函数手动分离subprocess。 这个很好,因为你的计算甚至不必是JavaScript。 运行计算的subprocess甚至可以是C或其他东西。
  2. 或者,如果您search“worker” ,则Web Worker规范有几个可通过NPM实现的实现。 我不能说这些工作有多好,因为我没有用过,但他们可能是要走的路。

更新

我现在select一个。 当前的subprocessAPI支持以类似工作者的方式轻松地在进程之间发送消息和对象,所以没有必要使用单独的工作模块。

您可以使用Hook.io来为繁重的计算运行单独的节点进程,并在两者之间进行通信。 Hook.io特别有用,因为它具有自动修复网格,这意味着如果你的一个钩子(进程)崩溃,它可以自动重新启动。

使用多个NodeJS实例并通过套接字进行通信。

使用多个节点实例并通过node-zeromq,HTTP,纯TCP套接字,IPC(例如unix域套接字),JSON-RPC或其他方式进行通信。 或者按照上面的build议使用web worker API。

多实例方法有其优点和缺点。 缺点是启动这些实例和实现自己的交换协议是一个负担。 优点是可以扩展到许多计算机(而不是一台计算机内的许多内核/处理器)。

我认为这是迟到的方式,但这是nodejs的一个很棒的function,你必须知道。

multithreading的唯一方法是通过产生新的进程,到目前为止。 但nodejs在生成的节点分叉之间有一个实现的消息特征。 http://nodejs.org/docs/latest/api/child_processes.html#child_process.fork从开发者的伟大工作,你可以传递对象等消息给你的孩子和向后

您可以使用节点群集模块。

https://nodejs.org/api/cluster.html

我会使用JXCore – 这是一个精致的基于nodejs的引擎,它运行你的代码,但有几个选项,包括你正在寻找的multithreading。 在生产中运行它是一种魅力! 项目来源: https : //github.com/jxcore/jxcore

function包括:

  • 支持核心Node.JSfunction
  • 可embedded的接口
  • 发布到移动平台(Android,iOS ..)
  • 支持多个JavaScript引擎
  • multithreadingfunction
  • 过程configuration和监视
  • 内存中的文件系统
  • 应用包装
  • 支持最新的JavaScriptfunction(ES6,ASM.JS …)
  • 支持通用Windows平台(uwp)api