我有一个节点程序可以执行大量的同步工作。需要完成的工作可以很容易地分成几个部分。我想在我的机器上使用所有处理器内核。这可能吗?
在child processes和clusters上形成文档我认为没有明显的解决方案。子进程似乎专注于运行外部程序,而集群只适用于传入的http连接(或者我误解了?)。
我有一个简单的函数var output = fn(input)
并且只想运行它几次,将所有调用遍布我的机器上的核心,并在回调中提供结果。可以这样做吗?
答案 0 :(得分:1)
是的,子进程和集群是实现这一目标的方法。有几种方法可以解决您的问题。
您的服务器创建一个队列并管理该队列。无论何时需要调用函数,都会将其放入队列中。然后,您将一次处理N个队列,其中N等于核心数。当你开始处理时,你会产生一个子进程,可能使用spawn
或exec
,参数是另一个独立的Node.js脚本,以及任何其他参数(它只是一个命令行调用) ,基本上)。在该脚本中,您将完成工作,并将结果发送回服务器。然后工人被释放。
您可以使用群集创建专用服务器,其中所有功能都是运行您的功能。使用cluster
模块,您可以(再次)创建N个其他工作人员,并将工作委托给这些工作人员。
现在这可能看起来像很多工作,而且确实如此。因此,您应该使用现有的库,因为在大多数情况下,这是一个解决问题。我非常喜欢基于redis的队列,因此如果您对此感兴趣,请参阅this answer以获取一些队列建议。