हमने सी # Queue
का उपयोग करके एक संदेश कतार लागू की है। हम जानते हैं कि हमारे पास while
लूप के साथ प्रोसेसिंग के लिए कतार से उपलब्ध संदेश लेने के लिए केवल एक उपभोक्ता है। हम यह भी जानते हैं कि कतार में संदेश डालने के लिए केवल एक निर्माता है।संदेश कतार सोच
हम एक lock
ऊपर संदेश कतार पर यकीन है कि उपभोक्ता और निर्माता एक साथ कतार उपयोग नहीं कर सकते बनाने के लिए किया है।
मेरा प्रश्न यह है कि lock
आवश्यक है? यदि Queue
Count
संपत्ति के बाद एक आइटम वास्तव में जोड़ा गया है और यदि उपभोक्ता Count
पुनर्प्राप्त करने से पहले जांचता है, तो उपभोक्ता को एक पूर्ण संदेश वस्तु मिलनी चाहिए, यहां तक कि हमारे पास lock
नहीं है। सही? इसलिए हमें आंशिक संदेश आइटम समस्या का सामना नहीं करना पड़ेगा। तो हम उस lock
से छुटकारा पा सकते हैं?
lock
सिस्टम को धीमा कर देगा और कभी-कभी हम देख सकते हैं कि पुनर्प्राप्ति धागा थोड़ी देर के लिए अवरुद्ध है क्योंकि हमारे पास बहुत भारी उत्पादक है।
संपादित करें:
दुर्भाग्य से हम नेट 3.5 का उपयोग कर रहे हैं।
आप .NET 4 का उपयोग कर सकते हैं, तो यह एक 'BlockingCollection है' और एक 'ConcurrentQueue', प्रदर्शन के लिए के रूप में, http: //geekswithblogs.net/BlackRabbitCoder/archive/2010/06/07/c-system.collections.concurrent.concurrentqueue-vs.-queue.aspx –
यदि आपके पास प्रदर्शन समस्याएं हैं, तो क्या आप कुछ कोड पोस्ट कर सकते हैं। साथ ही जब आप कहते हैं कि निर्माता भारी है, तो प्रति सेकेंड आइटम कितना भारी है? –