请教 async 并发限制的问题
发布于 10 年前 作者 wmzy 5251 次浏览 最后一次编辑是 8 年前 来自 问答

使用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

回到顶部