两个 js手写简易流程并发控制的题
发布人:shili8
发布时间:2025-03-09 11:53
阅读次数:0
**流程并发控制**
在软件开发中,流程并发控制是指多个任务或流程同时执行的能力。这种设计可以提高系统的吞吐量、响应速度和可扩展性。在 JavaScript 中,我们可以使用 Promise 和 async/await 来实现流程并发控制。
**示例1: 使用 Promise**
我们来看一个简单的例子,假设有三个任务:A、B 和 C。每个任务都需要花费一定时间完成。我们希望同时执行这三个任务,并且当所有任务完成后,输出结果。
javascript// 定义三个任务函数function taskA() { return new Promise((resolve, reject) => { setTimeout(() => { console.log('Task A completed'); resolve(); },2000); }); } function taskB() { return new Promise((resolve, reject) => { setTimeout(() => { console.log('Task B completed'); resolve(); },3000); }); } function taskC() { return new Promise((resolve, reject) => { setTimeout(() => { console.log('Task C completed'); resolve(); },1000); }); } // 使用 Promise.all() 来并发执行任务Promise.all([taskA(), taskB(), taskC()]) .then(() => { console.log('All tasks completed'); }) .catch((error) => { console.error(error); });
在这个例子中,我们使用 `Promise.all()` 来并发执行三个任务。`Promise.all()` 会等待所有 Promise 都完成后,才会输出结果。如果任何一个 Promise 失败,`Promise.all()` 也会被 reject。
**示例2: 使用 async/await**
我们来看另一个例子,假设有两个任务:A 和 B。每个任务都需要花费一定时间完成。我们希望同时执行这两个任务,并且当所有任务完成后,输出结果。
javascript// 定义两个任务函数async function taskA() { console.log('Task A started'); await new Promise((resolve, reject) => { setTimeout(() => { console.log('Task A completed'); resolve(); },2000); }); } async function taskB() { console.log('Task B started'); await new Promise((resolve, reject) => { setTimeout(() => { console.log('Task B completed'); resolve(); },3000); }); } // 使用 async/await 来并发执行任务async function main() { try { await taskA(); await taskB(); console.log('All tasks completed'); } catch (error) { console.error(error); } } main();
在这个例子中,我们使用 `async/await` 来并发执行两个任务。`async/await` 会等待所有任务完成后,才会输出结果。如果任何一个任务失败,`async/await` 也会被 reject。
**总结**
流程并发控制是软件开发中的一个重要概念。在 JavaScript 中,我们可以使用 Promise 和 async/await 来实现流程并发控制。通过使用这些技术,我们可以提高系统的吞吐量、响应速度和可扩展性。