我正在一個java應用程序有一個生產者 - 消費者模式。早些時候,製作人沒有按順序製作事件(例如,'2'是在'1'之前製作的,但消費者必須按順序發送它們(例如,'1',然後'2',然後'3'等)。爲了說明這個問題,TreeSet被用來維護一個隊列,並且爲了查看和刪除這些元素,在遍歷上也是這樣做的。到現在爲止還挺好。改變的是生產者現在按順序生成事件,因此我決定使用: -Java分析的可伸縮性和時間複雜性
a)一個LinkedBlockingQueue(它具有隊列的基本屬性,其中只能訪問第一個和最後一個元素,如它應該是一個隊列)。 b)使用LBQ使我從樹中的O(log n)到O(1)。
c)我不必再寫明確的同步了,ReentrantLock負責LBQ的放入和取出方法。
d)我不再需要寫明確的等待/通知,LBQ負責處理這個問題。 e)LBQ有2個鎖,因此put和take可以同時在不同的CPU上運行。 f)LBQ使用CAS來維護等待線程隊列。
所有的事情對我來說都很好。但我卡住了,下面是一些問題: -
a)我需要通過收集一些指標來證明在TreeSet上使用LBQ的優勢。我應該在我的eclipse中使用哪個免費的分析器? Visual VM很好,但有沒有更好的選擇?(Introscope將用於我的應用程序的顯式運行,而不是在我的本地eclipse上,這是我無法抗爭的一個限制,TPTP被拒絕)。
b)由於在LinkedBlockingQueue中使用了2個鎖,我該如何證明吞吐量(看起來在紙上)的增加?這是我希望看到並證明的一個重要方面。
感謝
你最終使用的是什麼 – 2012-07-13 23:37:30