并发无锁队列学习之一【开篇】

简介:

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

相关文章
|
2月前
|
存储 监控 算法
深入探究Java线程池:提升并发性能的利器
在当今高度并发的应用开发中,Java线程池作为一种广泛应用的并发编程技术,提供了一种优雅且高效的线程管理方案。本文深入探究Java线程池的相关技术,涵盖其核心概念、优势、常见类型(如FixedThreadPool、CachedThreadPool、SingleThreadExecutor、ScheduledThreadPool、ForkJoinPool及WorkStealingPool)、核心参数配置、异常处理与监控方法,以及性能调优的最佳实践,帮助读者更好地理解和应用线程池,从而提升并发性能。
|
6月前
|
资源调度 安全 调度
在讨论Python多线程与并发
在讨论Python多线程与并发
25 2
|
6月前
|
算法 Go 调度
goroutine源码分析,直击并发底层实现
goroutine源码分析,直击并发底层实现
62 0
|
12月前
|
安全 Java 调度
Java并发编程学习1-并发简介
本篇介绍并发简介,带大家走近Java并发编程的世界
71 0
Java并发编程学习1-并发简介
|
存储 缓存 算法
Java多线程与并发-原理
Java多线程与并发-原理
55 0
|
算法 Java 调度
《多线程与高并发》读书笔记(一)
《多线程与高并发》读书笔记(一)
55 0
|
安全 Java Spring
并发编程-01并发初窥
并发编程-01并发初窥
86 0
使用线程池多线程优化大数据量项目 ✨ 每日积累
使用线程池多线程优化大数据量项目 ✨ 每日积累
使用线程池多线程优化大数据量项目 ✨ 每日积累
|
存储 缓存 安全
Java并发编程系列之一并发理论基础
本系列文章开始Java并发编程的进阶篇的学习,为了初学者对多线程的初步使用有基本概念和掌握,前置知识会对一些基础篇的内容进行介绍,以使初学者能够丝滑入戏。
Java并发编程系列之一并发理论基础
|
缓存 Java
阿里巴巴面试题- - -多线程&并发篇(二十九)
阿里巴巴面试题- - -多线程&并发篇(二十九)