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