0x000 概述
这篇文章说的是队列,队列的用处也贼大,削峰、限流、消息异步化等等等
0x001 什么是队列
队列就是先入先出的数组,就和平常银行排队一样,先排队的人先处理事务,如图
只有两个操作:
- 入队:将数据放入队列
- 出队:将数据取出并处理
0x002 初始化
js
中的队列依旧可以使用数组实现
function init() {
return []
}
0x003 入队
入队要将数据放到数组的最后,js
可以用push
function enQueue(queue, data) {
queue.push(data)
}
0x004 出队
出队要拿出第一个数据,js
可以用shift
function deQueue(queue) {
queue.shift()
}
0x005 使用
function main() {
let queue = init()
enQueue(queue, 1)
enQueue(queue, 2)
enQueue(queue, 3)
deQueue(queue)
deQueue(queue)
deQueue(queue)
}
0x006 日常使用
依旧不会这么使用
let queue=[]
queue.push(1)
queue.push(2)
queue.push(3)
queue.shift()
queue.shift()
queue.shift()
queue.shift()
0x007 栗子:快速生成、缓慢
生产者每秒生成两条消息,但是消费者只消费一条消息。
- 效果
- 源代码
const message = []
let index = 0
setInterval(() => {
message.push(++index)
}, 500)
setInterval(() => {
console.log(message.shift())
}, 1000)