并发无锁队列学习之一【开篇】
1、前言
队列在计算机中非常重要的一种数据结构,尤其在操作系统中。队列典型的特征是先进先出(FIFO),符合流水线业务流程。在进程间通信、网络通信之间经常采用队列做缓存,缓解数据处理压力。结合自己在工作中遇到的队列问题,总结一下对不同场景下的队列实现。根据操作队列的场景分为:单生产者——单消费者、多生产者——单消费者、单生产者——多消费者、多生产者——多消费者四大模型。其实后面三种的队列,可以归纳为一种多对多。根据队列中数据分为:队列中的数据是定长的、队列中的数据是变长的。
2、队列操作模型
(1)单生产者——单消费者
(2)多生产者——单消费者
(3)单生产者——多消费者
(4)多生产者——多消费者
3、队列数据定长与变长
(1)队列数据定长
(2)队列数据变长
4、并发无锁处理
(1)单生产者——单消费者模型
此种场景不需要加锁,定长的可以通过读指针和写指针进行控制队列操作,变长的通过读指针、写指针、结束指针控制操作。具体实现可以参考linux内核提供的kfifo的实现。可以参考:http://blog.csdn.net/linyt/article/details/5764312
(2)(一)多对多(一)模型
正常逻辑操作是要对队列操作进行加锁处理。加锁的性能开销较大,一般采用无锁实现。无锁实现原理是CAS、FAA等机制。定长的可以参考:
http://www.searchtb.com/2012/10/introduction_to_disruptor.html
http://coolshell.cn/articles/8239.html
变长的可以参考intel dpdk提供的rte_ring的实现。http://blog.csdn.net/linzhaolover/article/details/9771329
相关文章
- java多线程并发之旅-14-lock free queue 无锁队列[通俗易懂]
- executorservice 线程池_并发数与线程数
- laravel+Redis简单实现队列通过压力测试的高并发处理
- go的并发小知识
- Java 并发开发:内置锁 Synchronized详解编程语言
- [javaSE] 看博客学习java并发编程详解编程语言
- Redis实现高并发队列处理(redis队列处理高并发)
- MySQL配置优化—并发连接数设置(mysql的并发连接数)
- 性能Linux优化并发性能:启示与突破(Linux提高并发)
- 管理Linux下实现高效的并发连接管理(linux并发连接)
- 控制MySQL数据库并发控制实践(mysql数据库并发)
- Redis队列的并发优化:提高业务效率(redis队列并发)
- Redis队列高并发实现(redis队列实现高并发)
- 解析MySQL高并发写入场景优化技巧(mysql大并发写入)
- 高效实现消息处理: Redis队列与PHP的并发技巧(redis队列并发php)
- MySQL线程安全:实现多线程并发操作的保障。(mysql 线程安全)
- MySQL中如何使用nowait关键字,提高查询性能和并发能力(mysqlnowait)
- Redis 解决高并发超发的有效方法(redis高并发超发)
- Redis队列高效率解决高并发问题(redis队列解决高并发)
- 用Redis锁实现高效的并发控制(redis锁用来干啥的)