gpt4 book ai didi

node.js - 限制 CPU NODE.JS 操作以允许处理新调用

转载 作者:太空宇宙 更新时间:2023-11-03 22:17:20 24 4
gpt4 key购买 nike

我有一个expressJS应用程序,它接受一个请求,导致执行1K到50K的fs.link()操作。 (甚至可能达到 500K)。

发生这种情况时,请求(POST)不会被搁置。我立即触发了 res.send(),这让客户很高兴。

但是服务器然后“ fork ”下面的作业,它需要去执行所有异步发生的 fs.links() ,但是工作量(CPU、磁盘等)意味着 ExpressJS 服务是在此期间对新请求的响应不太灵敏。

是否有一些简单的方法(除了 childProcess 之外)来模拟执行这些文件链接的低优先级线程的 fork ?

<小时/>
Job.prototype.runJob = function (next) {
var self = this;
var max = this.files.length;
var count = 0;
async.each(this.files,
function (file, step) {
var src = path.join(self.sourcePath, file.path);
var base = path.basename(src);
var dest = path.join(self.root, base);
fs.link(src, dest, function (err) {
if (err) {
// logger.addLog('warn', "fs.link failed for file: %s", err.message, { file: src });
self.filesMissingList.push(src);
self.errors = true;
self.filesMissing++;
} else {
self.filesFound++;
}
self.batch.update({ tilesCount: ++count, tilesMax: max, done: false });
step(null);
});
},
function (err) {
self.batch.update({ tilesCount: count, tilesMax: max, done: true });
next(null, "FalconView Linking of: " + self.type + " run completed");
});
}

最佳答案

您可以使用webworker-threads模块,这有利于将 CPU 密集型任务转移到其他线程上。或者,您可以滥用集群,但它确实是不适合这项工作的工具。 (cluster 模块确实更适合扩展 Web 服务,而不是执行密集型任务。)

关于node.js - 限制 CPU NODE.JS 操作以允许处理新调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22387137/

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