队列操作模型
(1)单生产者——单消费者
![](https://i-blog.csdnimg.cn/blog_migrate/df26ee97b7a01576ce119768eda0cab7.png)
(2)多生产者——单消费者
![](https://i-blog.csdnimg.cn/blog_migrate/672edae30e7cc5d7dae3c05abb5883fe.png)
(3)单生产者——多消费者
![](https://i-blog.csdnimg.cn/blog_migrate/3c2270e70c203f86ca5ae0d692a675f3.png)
(4)多生产者——多消费者
![](https://i-blog.csdnimg.cn/blog_migrate/3c1d070b8752f6cdcf35dace6a9a3566.png)
3、队列数据定长与变长
(1)队列数据定长
![](https://i-blog.csdnimg.cn/blog_migrate/b4f614a5d20d3b2ea6c16e823d31feae.png)
(2)队列数据变长
![](https://i-blog.csdnimg.cn/blog_migrate/7336d4e47afecbc14878feaf6d27712a.png)
并发无锁处理
(1)单生产者——单消费者模型
此种场景不需要加锁,定长的可以通过读指针和写指针进行控制队列操作,变长的通过读指针、写指针、结束指针控制操作。具体实现可以参考linux内核提供的kfifo的实现。可以参考:
https://blog.csdn.net/linyt/article/details/53355355
(2)(一)多对多(一)模型
正常逻辑操作是要对队列操作进行加锁处理。加锁的性能开销较大,一般采用无锁实现。无锁实现原理是CAS、FAA等机制。定长的可以参考:
http://coolshell.cn/articles/8239.html
变长的可以参考intel dpdk提供的rte_ring的实现。