现有一个最大长度为 20 的集合,需要实现一个生产者不停的往集合中添加数据,两个 消费者不停的从集合中取数据,当集合装满元素的时候,生产者停止生产,当队列为空时消费者停止消费的效果。请编写代码实现。 用前端实现
时间: 2024-02-20 10:56:29 浏览: 21
在前端实现生产者消费者模型需要使用到异步编程的技术,例如Promise、async/await等。下面是一个基于JavaScript的实现:
```javascript
// 定义一个最大长度为20的队列
const queue = new Array(20);
// 定义一个生产者,不停向队列中添加数据
async function producer() {
let count = 0;
while (true) {
if (queue.length === queue.maxlength) {
console.log('队列已满,停止生产');
break;
} else {
queue.push(count);
console.log('生产者生产了数据:', count);
count++;
await new Promise(resolve => setTimeout(resolve, 500));
}
}
}
// 定义一个消费者,不停从队列中取出数据
async function consumer(name) {
while (true) {
if (queue.length === 0) {
console.log('队列已空,停止消费');
break;
} else {
const data = queue.shift();
console.log(`${name}消费了数据: ${data}`);
await new Promise(resolve => setTimeout(resolve, 1000));
}
}
}
// 启动生产者和消费者任务
Promise.all([
producer(),
consumer('Consumer1'),
consumer('Consumer2')
]);
```
在程序中,我们首先定义了一个最大长度为20的队列,然后定义了一个生产者函数和两个消费者函数。在生产者函数中,我们使用了队列的push方法向队列中添加数据,如果队列已满,则停止生产。在消费者函数中,我们使用了队列的shift方法从队列中取出数据,如果队列已空,则停止消费。最后,我们使用了Promise.all方法启动了生产者和消费者任务。在生产者和消费者函数中,我们使用了await和setTimeout方法来实现异步编程。