并发无锁队列学习(概念介绍)

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

【推广】 免费学中医,健康全家人
原文地址:https://www.cnblogs.com/llguanli/p/8377887.html