node.js - async.parallel 适用于大量函数

标签 node.js node-async

我有一个函数,我想调用 100 万次。该函数对数据库进行两次调用(首先是 SELECT,然后是 UPDATE)。我当前的方法是将这些函数存储在一个数组中,然后在此数组上调用 async.parallel。

我担心这会导致 ENOMEM 或其他结果。

这里有更好的方法吗?

最佳答案

您可以使用生成器进行队列:

var totalTasks = 1000000;
var nTasks = 0;

// Generate data to send to query 
var getData = (function() {
    var i = 0;

    return function() {
        i++;
        return {
            number: i
        };
    };

})();

// Create the task running each time
var task = function(data, done) {
    nTasks++;
    console.log("Make task", nTasks);
    doQuery(data, done);
};

// Create queue with a limit concurrency
var queue = async.queue(task, 10); // <- parallels queries*

// The callback execute each task was execute
var cb = function(err) {
    if (err) throw err;

    // Add new tasks to queue if is neccesary    
    if (nTasks < totalTasks && queue.length() < queue.concurrency) {
        queue.push(getData(), cb);
    }

};

var i;

// Add the first x tasks to queue
for (i = 0; i < queue.concurrency; i++) {
    queue.push(getData(), cb);
}
  • 需要考虑连接池的大小,或者MySQL当前最大进程数。

关于node.js - async.parallel 适用于大量函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33442622/

相关文章:

mysql - 在开始时间前 15 分钟获取所有类(class)

node.js - 使用 ts-node 时通过 fork() 调用子进程

javascript - puppeteer 在运行所有 Jest 测试之前关闭浏览器

node.js - 尚未声明 `distinct` 的值

javascript - 在nodejs中使用aysync对oracledb进行同步查询

node.js - 未捕获的类型错误 : useValue, useFactory,数据不可迭代! Angular 4 cli项目错误

node.js - 在 Electron 应用程序中运行时加载 Nodejs 模块

javascript - async.apply 在 async.waterfall 中

javascript - NodeJS 发送混洗数据作为 API 响应

node.js - Node 异步 : How to map keys to key-values?