2012-04-19 11 views
5

सक्रिय ऑब्जेक्ट डिज़ाइन पैटर्न जैसा कि मैं समझता हूं, एक वस्तु के साथ एक (निजी/समर्पित) थ्रेड लाइफ टाइम बांध रहा है और इसे स्वतंत्र डेटा पर काम कर रहा है। मैंने पढ़े गए कुछ दस्तावेजों से, इस तरह के प्रतिमान का विकास दो कारणों से हुआ था, सबसे पहले, कच्चे धागे का प्रबंधन दर्द होगा और साझा संसाधन के लिए दूसरा और धागा म्यूटेक्स और ताले का उपयोग करके अच्छी तरह से स्केल नहीं करेगा। जबकि मैं पहले कारण से सहमत हूं, मैं दूसरे को पूरी तरह से समझ नहीं पा रहा हूं। ऑब्जेक्ट सक्रिय करना सिर्फ ऑब्जेक्ट को स्वतंत्र बनाता है लेकिन लॉक/म्यूटेक्स के लिए विवाद जैसी समस्याएं अभी भी हैं (जैसा कि हमने अभी भी कतार/बफर साझा किया है), ऑब्जेक्ट ने केवल संदेश कतार पर साझाकरण जिम्मेदारी सौंपी है। जैसा कि मैंने देखा है, इस डिज़ाइन पैटर्न का एकमात्र लाभ वह मामला है जहां मुझे साझा ऑब्जेक्ट पर लंबे एसिंच कार्य करना था (अब जब मैं सिर्फ साझा कतार में संदेश भेज रहा हूं, थ्रेड को अब mutex/ताले लेकिन वे अभी भी ब्लॉक और संदेश/कार्य प्रकाशित करने के लिए संघर्ष करेंगे)। इस मामले के अलावा कोई और परिदृश्य बता सकता है जहां इस तरह के डिजाइन पैटर्न के अन्य फायदे होंगे।सक्रिय ऑब्जेक्ट का उपयोग करने के लिए या नहीं?

मेरा दूसरा प्रश्न है (मैंने अभी डिजाइन पैटर्न के आसपास खुदाई शुरू की है), सक्रिय वस्तु, रिएक्टर और प्रोक्टर डिजाइन पैटर्न के बीच वैचारिक अंतर क्या है। आप कैसे निर्णय लेते हैं कि कौन सा डिज़ाइन पैटर्न अधिक कुशल है और आपकी आवश्यकताओं के अनुरूप है। यह वास्तव में अच्छा होगा अगर कोई कुछ उदाहरण दिखा सकता है कि तीन डिज़ाइन पैटर्न कैसे व्यवहार करेंगे और किसके पास विभिन्न परिदृश्यों में तुलनात्मक लाभ/हानि है।

मैं कर रहा हूँ की उलझन प्रकार के रूप में मैं सक्रिय वस्तु (जो साझा इस्तेमाल किया धागा सुरक्षित बफर) का इस्तेमाल किया है और बढ़ावा देने :: asio (Proactor) दोनों async सामान के समान तरह करना है, मैं अगर किसी भी एक है जानना चाहते हैं किसी समस्या के निकट विभिन्न पैटर्न की प्रयोज्यता पर अधिक अंतर्दृष्टि।

उत्तर

4

ACE websiteActive Object, Proactor en Reactor डिज़ाइन पैटर्न पर कुछ बहुत अच्छे कागजात हैं। उनके उद्देश्य का एक संक्षिप्त सारांश:

सक्रिय वस्तु डिज़ाइन पैटर्न विधि मंगलाचरण से विधि निष्पादन अलग करता संगामिति को बढ़ाने के लिए और एक वस्तु है कि नियंत्रण के अपने खुद धागा में रहता है के लिए सिंक्रनाइज़ पहुँच को आसान बनाने में। इसके रूप में भी जाना जाता है: समवर्ती वस्तु, अभिनेता।

Proactor पैटर्न demultiplexing और कई ईवेंट हैंडलर्स, जो अतुल्यकालिक घटनाओं के पूरा होने द्वारा ट्रिगर कर रहे की भेजने का समर्थन करता है। Boost.Asio में इस पैटर्न का भारी उपयोग किया जाता है।

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