並發無鎖隊列學習之一【開篇】


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM