併發無鎖隊列學習(一)

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章