请教 async 并发限制的问题
使用async流程控制库在什么情况下需要限制并发量? 并发数(limit参数)通常根据什么来定?
5 回复
async.eachLimit = function (arr, limit, iterator, callback) {
var fn = _eachLimit(limit);
fn.apply(null, [arr, iterator, callback]);
};
async.forEachLimit = async.eachLimit;
var _eachLimit = function (limit) {
return function (arr, iterator, callback) {
callback = callback || function () {};
if (!arr.length || limit <= 0) {
return callback();
}
var completed = 0;
var started = 0;
var running = 0;
(function replenish () {
if (completed >= arr.length) {
return callback();
}
while (running < limit && started < arr.length) {
started += 1;
running += 1;
iterator(arr[started - 1], function (err) {
if (err) {
callback(err);
callback = function () {};
}
else {
completed += 1;
running -= 1;
if (completed >= arr.length) {
callback();
}
else {
replenish();
}
}
});
}
})();
};
};
```
@i5ting 多谢,但这个好像不是我想要的答案。。
node-lesson第五集貌似有讲这个 《使用 async 控制并发》
@luoyjx 这个我之前也看过,但也只是在抓包情况下,这个可以参考服务器最大连接数和请求频率,但是其它异步情形呢?比如数据库读写,文件读写等。
@wmzy 额,那倒还没涉及过相关的,帮不到你了:P