数据结构与算法--消息队列底层实现

消息队列

step1:顺序队列

​ 消息队列用来解决类似生产者-消费者模型问题,按照实现方式,分为基于链表实现的链式队列基于数组实现的顺序队列

​ 对于链式队列,优点是支持无限大,缺点是性能低;

​ 对于顺序队列,优点是性能高,缺点是数量有限(当队列满时生产者就需要等待)

​ 而消息队列为了追求性能和可控性(链式队列理论无限大因此对于内存不可控),绝大多数都采用顺序队列

step2:循环顺序队列

​ 相比普通顺序队列,循环顺序队列在添加、删除操作时无需进行数据搬移,因此我们进一步对顺序队列优化为循环顺序队列

step3:加锁的循环顺序队列

​ 循环顺序队列虽然性能高,但是高并发下会造成写入覆盖、重复读取等问题,例如添加时:

1. void add(int val) {
2.   if ((tail + 1) % size == head) return;
3.   data[tail] = val;
4.   tail = (tail + 1) % size;
6. }

​ 比如线程1执行到第三行后,线程2开始执行add()&#

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值