【读书笔记】线程安全消息队列设计思路

一.

最容易想到的方式就是队列本身就是一个stl的list,向队列中加入消息或从队列中提取消息时就操作这个list,单个操作过程使用同步锁。

缺点:频繁的锁竞争使得性能很差

二.

维护一个存放若干list的容器,为list设置数量上限

当某个线程需要向队列中添加新消息时,从容器中取一个空list并持有,直到存满,将list放回容器,再取空list

当逻辑线程需要从队列中提取消息时,从容器这种取一个非空的list,读出全部消息后放回容器

操作容器的过程需要使用同步锁

缺点:在子list没有被存满时,其中的消息不能被读取

优点:

  1. 减少了锁竞争
  2. 可以接受多个不同线程投递消息

三.

维护两个list,一个供逻辑线程读,另一个供I/O线程写。

当逻辑线程读完后,两个list互换,互换时加锁

I/O线程每次写入时加锁(虽然加锁次数较多,但只有在遭遇list对调时才会阻塞)

逻辑线程读取时不需要加锁

缺点:只能支持一个I/O线程对应一个逻辑线程



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值