1. 程式人生 > >佇列(queue)

佇列(queue)

佇列(queue):
佇列線上程池等有限資源池中的應用。

    我們知道,CPU資源是有限的,任務的處理速度與執行緒個數並不是線性正相關。相反,過多的執行緒反而會導致CPU頻繁
切換,處理效能下降。所以,執行緒池的大小一般都是綜合考慮要處理任務的特點和硬體資源,來事先設定的。
    當我們向固定大小的執行緒池中請求一個執行緒時,如果執行緒池中沒有空閒資源,這個時候執行緒池如何處理這個請求?是
拒絕請求還是排隊請求?各種處理策略又是怎麼實現的呢?
    實際上,這些問題並不複雜,其底層的資料結構就是,佇列。

如何理解佇列:
    佇列這個概念非常好理解。你可以把它想象成排隊買票,先來的先買,後來的人只能站末尾,不允許插隊。先進者
先出,這就是典型的“佇列”。
    我們知道,棧只支援兩個基本操作:入棧push()和出棧pop()。佇列跟棧非常相似,支援的操作也很有限,最基本的
操作也是兩個:入隊enqueue(),放一個數據到佇列尾部;出隊dequeue(),從佇列頭部取一個元素。
    所以,佇列跟棧一樣,也是一種非常基礎的資料結構,佇列的應用也非常廣泛,特別是一些具有某些特性的佇列,
比如迴圈佇列,阻塞佇列,併發佇列。他們在很多偏底層系統,框架,中介軟體的開發中,起著關鍵性的作用。比如高效能
佇列Disruptor,Linux環形快取,都用到了迴圈併發佇列;Java concurrent併發包利用ArrayBlockingQueue來實現
公平鎖等。