2009-05-06 16 views
16

मैं ऐसी प्रोजेक्ट पर काम कर रहा हूं जो एक कतार का उपयोग करता है जो दूरस्थ संदेशों को भेजे जाने वाले संदेशों के बारे में जानकारी रखता है। उस स्थिति में एक धागा कतार में जानकारी डालने के लिए ज़िम्मेदार है और एक अन्य थ्रेड कतार से जानकारी प्राप्त करने और इसे भेजने के लिए ज़िम्मेदार है। दूसरे थ्रेड को समय-समय पर जानकारी के लिए कतार की जांच करने की आवश्यकता होती है।जावा में कतार को अवरुद्ध करने के क्या फायदे हैं?

लेकिन बाद में मैंने पाया कि यह पहिया का पुनर्निर्माण है :) मैं इस उद्देश्य के लिए अवरुद्ध कतार का उपयोग कर सकता हूं।

उपरोक्त आवेदन के लिए अवरुद्ध कतार का उपयोग करने के अन्य क्या फायदे हैं? (पूर्व: प्रदर्शन, कोड के संशोधित, कोई विशेष चाल आदि)

उत्तर

26

मुख्य लाभ यह है कि BlockingQueue एक सही, थ्रेड-सुरक्षित कार्यान्वयन प्रदान करता है। डेवलपर्स ने इस सुविधा को अपने आप वर्षों से लागू किया है, लेकिन सही होने के लिए मुश्किल है। अब रनटाइम में समेकन विशेषज्ञों द्वारा विकसित, समीक्षा और रखरखाव का कार्यान्वयन किया गया है।

कतार की "अवरुद्ध" प्रकृति में कुछ फायदे हैं। सबसे पहले, तत्व जोड़ने पर, यदि कतार क्षमता सीमित है, तो स्मृति खपत भी सीमित है। इसके अलावा, यदि कतार उपभोक्ता उत्पादकों के पीछे बहुत दूर हैं, तो निर्माता स्वाभाविक रूप से थके हुए हैं क्योंकि उन्हें तत्व जोड़ने के लिए इंतजार करना पड़ता है। कतार से तत्व लेते समय, मुख्य लाभ सादगी है; हमेशा के लिए इंतजार करना मामूली है, और एक निश्चित समय-समय के लिए सही ढंग से इंतजार करना थोड़ा और जटिल है।

6

ब्लॉकिंग कतार के साथ आप जो मुख्य चीज खत्म करते हैं वह 'मतदान' है। यह वह जगह है जहां आप

उस स्थिति में दूसरे थ्रेड को समय-समय पर जानकारी के लिए कतार की जांच करने की आवश्यकता होती है।

यह बहुत अनावश्यक CPU समय का उपयोग करके बहुत अक्षम हो सकता है। यह अनियंत्रित विलंबता भी पेश कर सकता है।

12

एक अवरुद्ध कतार एक कतार है कि ब्लॉक जब आप इसे से विपंक्ति करने की कोशिश है और कतार खाली है, या यदि आप इसे करने के लिए आइटम enqueue करने की कोशिश और कतार में पहले से ही भरा हुआ है। एक खाली कतार से निकलने का प्रयास करने वाला धागा तब तक अवरुद्ध हो जाता है जब तक कि कुछ अन्य थ्रेड कतार में किसी आइटम को सम्मिलित न करें। एक पूर्ण कतार में किसी आइटम को एनक्यू करने का प्रयास करने वाला धागा तब तक अवरुद्ध हो जाता है जब तक कि कोई अन्य थ्रेड कतार में स्थान नहीं बनाता है, या तो एक या अधिक आइटमों को हटाकर या कतार को पूरी तरह साफ़ कर देता है।

संबंधित मुद्दे