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

标签 node.js asynchronous express fork

我有一个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/

相关文章:

python - celery 从子任务发出任务

javascript - 在没有响应对象的情况下渲染 Jade View

node.js - Mongodb,查找集合是否为空,node.js

node.js - 使用nodejs连接Hbase实例

node.js - Mongoose:如何在填充期间排除虚拟 id 字段

Node.js maxFieldSize 超出

node.js - 使用 Express 在 Node 中 Req.body 未定义

javascript - 无法将文件复制到另一个存储桶,显示错误(NoSuchKey : The specified key does not exist.)

c# - 如果结果为空,IEnumerable.FirstOrDefaultAsync( predicate )?.ContinueWith() 是否返回?

javascript - ng-model 到我的服务器上的异步 xhr get/set 字段