Node.js 我可以使用子进程或集群在节点中执行自定义函数调用吗?

Node.js 我可以使用子进程或集群在节点中执行自定义函数调用吗?,node.js,Node.js,我有一个节点程序,它可以做很多繁重的同步工作。需要完成的工作可以很容易地分成几个部分。我想利用我的机器上的所有处理器内核来实现这一点。这可能吗 从文档上看,我看不到明显的解决方案。子进程似乎专注于运行外部程序,而集群只对传入的http连接起作用(或者我误解了吗?) 我有一个简单的函数var output=fn(input),我只想运行它几次,将所有调用分散到我机器上的内核上,并在回调中提供结果。可以这样做吗?是的,子进程和集群是实现这一点的方法。有几种方法可以实现问题的解决方案 服务器创建队列并

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

从文档上看,我看不到明显的解决方案。子进程似乎专注于运行外部程序,而集群只对传入的http连接起作用(或者我误解了吗?)


我有一个简单的函数
var output=fn(input)
,我只想运行它几次,将所有调用分散到我机器上的内核上,并在回调中提供结果。可以这样做吗?

是的,子进程和集群是实现这一点的方法。有几种方法可以实现问题的解决方案

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

  • 您可以使用集群创建一个专用服务器,它只需在其中运行您的功能。使用
    集群
    模块,您可以(再次)创建N个其他工人,并将工作委派给这些工人


  • 现在,这似乎是一个很大的工作,它是。因此,您应该使用现有的库,因为这在很大程度上是一个解决问题的方法。我非常喜欢基于redis的队列,所以如果您对此感兴趣,请参阅一些队列建议

    好的,那么基本上你所说的是,我对子进程和集群的假设是正确的,如果我想执行一个函数来实现这一点,我需要将它放在一个独立的脚本中,我或者创建一个服务器,只执行函数调用,并通过本地http请求获得响应?没错,js是一个单线程事件循环,javascript没有线程库。如果你想使用更多的内核,你需要额外的循环,因此需要通过子进程的额外进程。我知道事件循环。我只是觉得奇怪,当集群功能被添加到节点时,它们被严格地绑定到http服务器,而不是绑定到http服务器。集群模块只是生成进程,它没有http上下文。我使用了一般意义上的“服务器”一词,然后我误解了集群文档。我会再深入一次。