如何控制并发数增长或者减少
发布于 9 年前 作者 yuexing0921 4345 次浏览 最后一次编辑是 8 年前 来自 问答

说下需求,现在假设系统有一个任务列表,这个任务列表是不是固定的,有可能是0个也有可能是1000个, 任务列表按照循序执行,每次同时执行5个,5个任务执行完了,下一次,依然是5个, 一轮结束后,又从头开始执行任务,不断的循环执行。

但是问题来了, 第一,任务列表不是固定的,10点的时候是1000个,11点的时候就变成了1100个了 第二,任务执行过程中,有可能完成了,这个时候需要从任务列表中删除,这个时候就变成了900个了 现在就卡在问题二中。 谢谢了,如果还有描述不清楚的,我继续补充!

@FoghostCn 是的,我最初的方案也是用async,但是用了后,发现还是不行

async.mapLimit(confList, 5, function (conf, callback) {
		async.whilst(isRun,function(cb) {
				a(conf);
				setTimeout(cb, 1 * 1000);
			},function(err) {
				logger.error("Not working time!");
			}
		);
	}, function (err, result) {
		logger.error('Error: ' + err);
	});

confList是一个array,关键是我如何动态的控制confList
5 回复

async 带limit字眼的都是控制并发的

就这么默默的沉下去了,希望哪位大牛看到,可以给我一个思路。

你的问题没意义,或者问得有问题。

@hanyuzhou2006

重新说下,现在假设系统有一个任务列表,这个任务列表是不是固定的,有可能是0个也有可能是1000个, 任务列表按照循序执行,每次同时执行5个,5个任务执行完了,下一次,依然是5个, 一轮结束后,又从头开始执行任务,不断的循环执行。

但是问题来了, 第一,任务列表不是固定的,10点的时候是1000个,11点的时候就变成了1100个了 第二,任务执行过程中,有可能完成了,这个时候需要从任务列表中删除,这个时候就变成了900个了 现在就卡在问题二中。 谢谢了,如果还有描述不清楚的,我继续补充

不就是个任务队列么。 先弄个任务队列。开启n个worker做任务。完成了就队列里移除,如果要重做就追加到队列里面。 pop push 的方法看你怎么弄任务队列咯。单机版可以直接用数据结构里面的queue之类。简单多机器多个worker,可以用redis当队列。 如果队列都要什么分布式之类的,去看kafka之流。 你去看下生产者消费者啥的概念,再看看mq之类。 说完了=。=

回到顶部