提问人:davaer 提问时间:11/16/2023 更新时间:11/17/2023 访问量:27
node.js 中的并发控制机制
Concurenncy control mechanism in node.js
问:
const tasks = ...
let concurenncy = 2;
let running = 0;
let completed = 0;
let index = 0;
function next() {
while (running < concurenncy && index < tasks.length) {
const task = tasks[index++];
task(() => {
if (completed === tasks.length) {
return finish();
}
completed++;
running--;
next();
});
running++;
}
}
next();
function finish() {
console.log('All tasks are done');
}
您好,我有一个关于上面代码的问题。任务是我需要执行的异步任务数组,concurenncy 是可以并发运行的最大任务数。程序从前两个任务从数组中提取并执行的地方开始。一个任务结束后,将调用该特定任务的回调函数。为什么我需要在该回调中再次调用 next() 方法?如果回调完成,当前下一个方法中的循环会不会再次检查是否应该处理下一个任务?提前致谢
提前致谢!!
答:
0赞
jfriend00
11/17/2023
#1
为什么我需要在该回调中再次调用 next() 方法?
该循环只调用前 N 个任务,其中 N 是 is 的值,然后该循环完成,循环退出,因为在您启动了多个任务后将不再为 true。while
concurrency
running < concurenncy
concurenncy
然后,在一段时间后,其中一个任务将完成并调用其回调,并且您传递给每个任务的回调将执行。如果要然后启动另一个任务,则必须在该回调中再次调用,因为循环已经退出。next()
while
仅供参考,您的检查似乎有问题,因为您在计算刚刚完成的任务之前正在进行比较。你不应该在比较之前做吗?completed === tasks.length
completed++
completed === tasks.length
上一个:侦听数据库更改
下一个:如何知道交易是否连续持有独占锁?
评论