我可以使用subprocess或群集在节点中执行自定义函数调用吗?

我有一个节点程序,做了很多繁重的同步工作。 需要完成的工作很容易分成几个部分。 我想利用我的机器上的所有处理器核心。 这可能吗?

形成关于subprocess和集群的文档我没有看到明显的解决scheme。 subprocess似乎专注于运行外部程序,并且集群只能用于传入的http连接(或者我误解了这一点?)。

我有一个简单的函数var output = fn(input) ,并且只是想多次运行它,将所有的调用遍布在我的机器上的核上,并提供一个callback的结果。 可以这样做吗?

是的,subprocess和集群是这样做的。 有几种方法可以解决您的问题。

  1. 您的服务器创build一个队列并pipe理该队列。 无论何时你需要调用你的函数,你都会把它放到队列中。 然后,您将一次处理队列N个项目,其中N等于核心数量。 当你开始处理时,你会产生一个subprocess,可能是使用spawn或者exec ,这个参数是另一个独立的Node.js脚本,以及其他的参数(基本上只是一个命令行调用)。 在该脚本中,您将完成您的工作,并将结果发送回服务器。 工人然后被释放。

  2. 你可以用集群创build一个专用的服务器,在那里它将完成所有的function。 通过cluster模块,您可以(再次)创buildN个其他工人,并将工作委托给这些工人。

现在这可能看起来像很多工作,是的。 出于这个原因,你应该使用一个现有的库,因为这是一个解决问题的大部分。 我真的很喜欢基于redis的队列,所以如果你对这个问题感兴趣的话,可以看看这个队列build议的答案 。