一、 无锁队列简介
队列是先进先出的数据结构,但是多线程操作一个队列时,为了解决多线程安全问题需要加锁,而锁竞争是服务器性能的杀手。顺便说一句,消息队列的产生是因为A调用B的服务接口,而B的服务接口是个同步阻塞操作,只有处理完数据才会返回结果,
1. 无锁队列的分类
单生产者——单消费者
多生产者——单消费者
单生产者——多消费者
多生产者——多消费者四大模型。
根据队列中数据分为:
队列中的数据是定长的
队列中的数据是变长的
2.开源无锁队列
如果是企业解决方案中使用无锁队列,建议使用成熟的开源代码.
开源的无锁队列解决方案有:
liblfds
intel 开源的tbb
boost的lockfree
facebook的开源组件库folly中
github上的开源项目:https://github.com/haolipeng/concurrentqueue
3.需要了解的知识
cas知识,cpu指令级的锁
二、单生产者单消费者队列,不用加锁实现,原理分析
http://blog.chinaunix.net/uid-9620812-id-1643063.html
ring buffer环形缓冲区用法的确很巧妙.先进先出队列在队列满时不能写入数据,当队列为空时不能读数据.
平时总是吵要写精简代码.其实linux内核的代码偶尔读一读,就很提高个人编码水平.
参考连接:
http://purecpp.org/?cat=18
https://www.ibm.com/developerworks/cn/linux/l-cn-lockfree/