gpt4 book ai didi

javascript - 如何同时运行 Node 子进程

转载 作者:行者123 更新时间:2023-12-02 14:49:34 25 4
gpt4 key购买 nike

TL;DR:我在 Express 服务器上有一个端点,它在 child_process 中运行一些 cpu 绑定(bind)的逻辑。问题是,如果服务器收到针对该端点的多个请求,它不会同时运行这两个请求 - 它将它们排队并一次运行一个。有没有办法使用 Node child_process 以便我的服务器同时执行多个子进程?

长版本:Node 的主要缺点是它是单线程的,逻辑繁重(CPU 密集)的请求可能会使服务器停止运行,以便它可以在该逻辑完成运行之前不再接受请求。我认为我可以使用 child_process 来解决这个问题,它在释放我的服务器以接受其他请求方面非常有效。 但是 - 它一次只会执行一个 child_processes,创建一个可以得到很好备份的队列。我还有一个 Node cluster 设置,以便我的服务器被分成 8 个独立的“虚拟服务器”(8 核机器),所以我想我在技术上可以同时运行 8 个这样的子进程,但是我希望能够处理更多的流量。在寻找仍然允许我使用 Node 和 Express 的解决方案时,如果您绝对确定这在我当前的环境中无法有效完成,请仅建议使用不同的技术。预先感谢您的帮助!

端点:

app.get('/cpu-exec-file', function(req, res) {
child_process.execFile('node', ['./blocking_tasks/mathCruncher.js'], {timeout:30000}, function(err, stdout, stderr) {
var data = JSON.parse(stdout);
res.send(data);
})
});

mathCruncher.js:

var obj = {}

function myLoop (i) {
setTimeout(function () {
obj[i] = Math.random() * 100;
if (--i) {
myLoop(i);
} else {
string = JSON.stringify(obj);
console.log(string); // goes to stdout.
}
}, 1000)
};

myLoop(10);

最佳答案

Is there a way to use Node child_process so that my server will perform multiple child processes simultaneously?

消息队列和后端进程。

我使用 RabbitMQ 完全按照您的要求进行操作。还有其他几个很棒的消息系统,比如 ZeroMQ,甚至是 Redis,上面有一些 pub-sub 库。

其要点是向队列系统发送请求并让另一个进程接收消息,然后运行该进程来完成工作。

如果您需要工作人员的响应,您可以使用带有请求/回复设置的双向消息传递,或者对真正长时间运行的事物使用状态消息。

如果您对 RabbitMQ 方面感兴趣,我有一个关于 RabbitMQ 各种模式的免费电子邮件类(class),包括请求/回复和状态电子邮件:http://derickbailey.com/email-courses/rabbitmq-patterns-for-applications/

如果您对 RMQ w/Node 的基础培训感兴趣,请查看我的培训类(class) http://rabbitmq4devs.com

关于javascript - 如何同时运行 Node 子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36292694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com