并发无锁队列学习(概念介绍)
2015-07-24 19:23
211 查看
1、前言
队列在计算机中非常重要的一种数据结构,尤其在操作系统中。队列典型的特征是先进先出(FIFO),符合流水线业务流程。在进程间通信、网络通信之间经常采用队列做缓存,缓解数据处理压力。结合自己在工作中遇到的队列问题,总结一下对不同场景下的队列实现。根据操作队列的场景分为:单生产者——单消费者、多生产者——单消费者、单生产者——多消费者、多生产者——多消费者四大模型。其实后面三种的队列,可以归纳为一种多对多。根据队列中数据分为:队列中的数据是定长的、队列中的数据是变长的。2、队列操作模型
(1)单生产者——单消费者(2)多生产者——单消费者
(3)单生产者——多消费者
(4)多生产者——多消费者
3、队列数据定长与变长
(1)队列数据定长(2)队列数据变长
4、并发无锁处理
(1)单生产者——单消费者模型此种场景不需要加锁,定长的可以通过读指针和写指针进行控制队列操作,变长的通过读指针、写指针、结束指针控制操作。具体实现可以参考linux内核提供的kfifo的实现。可以参考:/article/1394264.html
(2)(一)多对多(一)模型
正常逻辑操作是要对队列操作进行加锁处理。加锁的性能开销较大,一般采用无锁实现。无锁实现原理是CAS、FAA等机制。定长的可以参考:
http://www.searchtb.com/2012/10/introduction_to_disruptor.html
http://coolshell.cn/articles/8239.html
变长的可以参考intel dpdk提供的rte_ring的实现。
/article/1386461.html
相关文章推荐
- 第一个Hadoop程序——WordCount
- JAVA时间类
- 初学C语言,使用 Visual Studio2013Community
- 第一个Hadoop程序——WordCount
- hdu 吉哥系列故事——完美队形 (最长公共子序列)
- 无Maven不项目---使用Eclipse快速搭建Maven项目
- Spring(八)编码剖析@Resource注解的实现原理
- hdoj 1896 Stones (优先队列)
- 【CODEFORCES】 A. Dreamoon and Stairs
- hdu 1714 RedField
- HDU 5294 Tricks Device (最短路+网络流)
- LightOJ 1048 - Conquering Keokradong 【二分】
- php实现Bloom Filter
- Ubuntu 1204 升级到 1404
- 随手小代码——二进制整型数组相加
- Adjust color space Constrast,Brightness,Hue,Saturation in YCbCr format.
- LPEG
- STM32F429 Discovery 开发板USART乱码问题,解决过程
- 更换STM32芯片类型引起keil下载Error Flash download failed-Cortex-M3问题的解决
- [UVA548]Tree[根据中序后序构建树][UVA536]Tree Recovery[根据前序中序构建树]