雙緩衝佇列

2021-07-05 03:39:36 字數 967 閱讀 1662

前段時間,做了個「雙緩衝佇列」,可是測試的效果就是不怎麼明顯,理論完全都在這裡,可是就是看不到效果。

昨天在胡總的提示下,終於意識到不該用阻塞佇列,換成普通的list物件,這樣效果就明顯多啦~~

又重新寫了一篇文件,如下

好,31毫秒。

這是我們的第一種解決方法,下面再來看第二種解決方法:

其實我們在factory類和kid類中都進行了同步處理,這樣一來,浪費了很多時間,到底是不是這樣的呢?我們可不可以直接用乙個不用處理執行緒同步的容器來放toy類物件呢?這樣以來是不是就可以節省很多開銷了?這個想法是有道理的,但是,事實是不是這樣的呢?馬上實踐!

**就不具體貼出來了,只是我們在tools類中用到的是乙個如下的物件

public static linkedblockingqueuelt= new linkedblockingqueue(1000);

對,阻塞佇列,這樣我們就只管往裡面取,從裡面拿了,不用自己考慮同步問題,factory類和kid類中也不同特意去加關鍵字進行同步了。

那麼這種方案的結果是多少呢?同樣是100000個玩具,看結果

哈哈,似乎跟我們上面的第二種方案,單阻塞佇列,沒有太大的差異。怎麼解釋呢?

不用著急,來,我將額定的玩具量後多加個「0」,讓他玩完1000000個!改一下單阻塞佇列方案的輸出結果,給他們乙個標記。再來看看結果:

效果出來了吧,我們再加大量,讓他們同時處理10000000個玩具物件: 

充分說明,使用雙緩衝佇列,比單緩衝阻塞佇列的效果要好,更別說單緩衝佇列了。

總結:從上面的分析,我們可以得知,在處理執行緒同步的時候,是要花費我們的時間的,雖然在有些時候,這樣的花費是我們可以接受的,但是在很多情況下,如果我們能注意到這樣的浪費,並且及時地完善我們的程式,這樣可以更大限度地提高我們程式的執行效率。尤其是在大的程式裡面,這樣的效果體現得更明顯。而往往越大的系統,對效能的要求也就越高。

希望這次對「雙緩衝佇列」的分析和設計,能對各位以後的開發帶來一些幫助。

雙緩衝佇列

例一 首先,使用arrayblockingqueue類建立乙個大小為10的雙緩衝佇列queue 然後,迴圈20次向佇列queue中新增元素,如果5秒內元素仍沒有入隊到佇列中,則返回false 如下 public class demo03 catch interruptedexception e 測試...

Java雙緩衝佇列實現

在某一模組中,需要將網路接收到的資料存入oracle中。這是乙個典型的生產者消費者場景,可以使用訊息佇列隔離生產者和消費者。由於接收的資料頻度很高,而oracle的插入速度較慢,為不影響接收端吞吐量,選擇了雙緩衝佇列作為訊息佇列。雙緩衝佇列的原理是一般情況下生產者使用寫佇列,消費者使用讀佇列,兩個執...

雙緩衝佇列方案 轉

雙緩衝訊息佇列 減少鎖競爭 在網路應用伺服器端,為了效能和防止阻塞,經常會把邏輯處理和i o處理分離 i o網路執行緒處理i o事件 資料報的接收和傳送,連線的建立和維護等.邏輯執行緒要對收到的資料報進行邏輯處理.通常網路執行緒和邏輯執行緒之間是通過資料報佇列來交換資訊,簡單來說就是乙個生產者 消費...