Skip to main content

任务调度

1

  // const taskQueue = new TaskQueue();
// taskQueue.add('log 11111', 1000);
// taskQueue.add('log 22222', 2000);
// taskQueue.add('log 33333', 2000);
// taskQueue.add('log 44444', 4000);
// taskQueue.add('log 55555', 3000);
// taskQueue.run(2);

2.实现一个带并发限制的异步调度器 Scheduler,保证同时运行的任务最多有两个

addTask(1000, '1')
addTask(500, '2')
addTask(300, '3')
addTask(400, '4')
// 的输出顺序是:2 3 1 4

// 整个的完整执行流程:

// 一开始1、2两个任务开始执行
// 500ms时,2任务执行完毕,输出2,任务3开始执行
// 800ms时,3任务执行完毕,输出3,任务4开始执行
// 1000ms时,1任务执行完毕,输出1,此时只剩下4任务在执行
// 1200ms时,4任务执行完毕,输出4

3

// 实现一个createRequest方法(假设浏览器允许无限多的并行请求),调用形式如下图,最后实现效果如图:

// ====>
// =====>
// =======>
// =====>
// ======>
// =====>
// ====>
// ====>

// 其中request函数的输入输出和fetch函数保持一致

const request = createRequest({
pool: 3,
})
for (let i = 0; i < 10; i++) {
request('/user').then(console.log)
}

4

let executeCount = 0;
const targetFn = async (nums) => {
executeCount++;
return nums.map((num) => 2 * num + 1);
};

const batcher = (fn) => {
// todo batch logic
};

const batchedFn = batcher(targetFn);

const main = async () => {
const [result1, result2, result3] = await Promise.all([
batchedFn([1, 2, 3]),
batchedFn([4, 5]),
batchedFn([6, 7]),
]);

console.log(result1, result2, result3); //
console.log(executeCount); // 预期为 1
};

main();

//实现预期1