के साथ इस stackoverflow पर मेरी पहली पोस्ट है ... मुझे आशा है कि कोई मेरी मदद कर सकतेजावा प्रदर्शन समस्या LinkedBlockingQueue
मैं जावा 6 LinkedBlockingQueue
के साथ एक बड़ा प्रदर्शन प्रतिगमन की है। पहले धागे में मैं कुछ ऑब्जेक्ट उत्पन्न करता हूं जो मैं कतार में धक्का देता हूं, दूसरे थ्रेड में मैं इन ऑब्जेक्ट को खींचता हूं। प्रदर्शन प्रतिगमन तब होता है जब LinkedBlockingQueue
की विधि को अक्सर बुलाया जाता है। मैंने पूरे कार्यक्रम की निगरानी की और take()
विधि ने समग्र रूप से सबसे अधिक समय दावा किया। और प्रवाह से ~ 58MB/s 0.9 MB/s जाता है ...
कतार पॉप और ले तरीकों इस वर्ग
public class C_myMessageQueue {
private static final LinkedBlockingQueue<C_myMessageObject> x_queue = new LinkedBlockingQueue<C_myMessageObject>(50000);
/**
* @param message
* @throws InterruptedException
* @throws NullPointerException
*/
public static void addMyMessage(C_myMessageObject message)
throws InterruptedException, NullPointerException {
x_queue.put(message);
}
/**
* @return Die erste message der MesseageQueue
* @throws InterruptedException
*/
public static C_myMessageObject getMyMessage() throws InterruptedException {
return x_queue.take();
}
}
कैसे कर सकते हैं मैं धुन take()
से एक स्थिर विधि के साथ कहा जाता है गिरफ्तारी कम से कम 25 एमबी/एस पूरा करने के लिए विधि, या क्या कोई अन्य वर्ग है जिसका उपयोग मैं कर सकता हूं जो "कतार" पूर्ण या खाली होने पर अवरुद्ध होगा।
तरह का संबंध
बार्ट
पी.एस .: मेरा बुरा अंग्रेजी के लिए खेद, मैं जर्मनी से हूँ;)
एमबी/एस व्यर्थ है। ले लो() एक संदर्भ मिलता है। चाहे उसका पेलोड (संदर्भ के शब्द के अलावा) कुछ बाइट्स या कई मेगाबाइट्स है, कतार के लिए अप्रासंगिक है। –
मुझे पता है ... लेकिन मैंने प्रतिगमन की विस्तारशीलता को मजबूर करने की कोशिश की;) – lofthouses
क्या आप पहले कतार में 5000 तत्व जोड़ने की कोशिश कर सकते हैं, फिर ले लेते हैं यह देखने के लिए कि प्रत्येक कितना समय व्यतीत करता है? –