मल्टी थ्रेडेड अनुप्रयोगों के यूएमएल आरेख


25

एकल-थ्रेडेड एप्लिकेशन के लिए मुझे उस एप्लिकेशन के आर्किटेक्चर का अवलोकन प्राप्त करने के लिए वर्ग आरेखों का उपयोग करना पसंद है। इस प्रकार का आरेख, हालांकि, उदाहरण के लिए भारी बहु-थ्रेडेड / समवर्ती अनुप्रयोगों को समझने की कोशिश करते समय बहुत मददगार नहीं रहा है, क्योंकि विभिन्न थ्रेड्स पर एक वर्ग "लाइव" के विभिन्न उदाहरणों (उदाहरण का उपयोग करना केवल एक से ही बचा है) धागा यह पर रहता है)। नतीजतन, कक्षाओं के बीच जुड़ाव जरूरी नहीं है कि मैं उन वस्तुओं पर तरीकों को कॉल कर सकता हूं, लेकिन इसके बजाय मुझे उस कॉल को लक्ष्य ऑब्जेक्ट के थ्रेड पर बनाना होगा।

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

मैं इन आरेखों को समस्या डोमेन के उच्च-स्तरीय दृश्य के रूप में उपयोग नहीं करना चाहता, बल्कि मेरी कक्षाओं / वस्तुओं, उनकी बातचीत और मेरे द्वारा उल्लिखित धागा-सीमाओं के कारण सीमाओं के विस्तृत विवरण के रूप में।

इसलिए मैं जानना चाहूंगा:

  1. बहु-थ्रेडेड अनुप्रयोगों को समझने में आपने किस प्रकार के आरेखों को सबसे अधिक उपयोगी पाया है?
  2. क्या क्लासिक यूएमएल के लिए कोई एक्सटेंशन है जो बहु-थ्रेडेड एप्लिकेशन की ख़ासियत को ध्यान में रखते हैं, उदाहरण के लिए, जो कि एनोटेशन के माध्यम से उदाहरण देते हैं
    • कुछ वस्तुएं एक निश्चित धागे में रह सकती हैं जबकि अन्य में कोई धागा-संबंध नहीं है;
    • किसी वस्तु के कुछ क्षेत्रों को किसी भी धागे से पढ़ा जा सकता है, लेकिन केवल एक से लिखा जाता है;
    • कुछ विधियाँ समकालिक हैं और एक परिणाम लौटाते हैं जबकि अन्य अतुल्यकालिक हैं जो अनुरोधों को कतारबद्ध करते हैं और उदाहरण के लिए एक अलग थ्रेड पर कॉलबैक के माध्यम से परिणाम लौटाते हैं।

2
मैंने व्यक्तिगत रूप से गतिविधि आरेखों को मॉडलिंग के लिए उपयोगी पाया (pontentially) समवर्ती उपयोग के मामलों / प्रक्रियाओं, लेकिन वे वास्तव में उपयुक्त नहीं हैं यदि आप कक्षा / ऑब्जेक्ट स्तर तक नीचे जाना चाहते हैं।
पेटर तोर्क

जवाबों:


12

थ्रेड निष्पादन कैसे हो सकता है, इसके बारे में सबसे महत्वपूर्ण अंतर्दृष्टि को अनुक्रम आरेख के रूप में जाना जाता है । यहाँ विकिपीडिया से एक उदाहरण दिया गया है

यहाँ छवि विवरण दर्ज करें

यह आरेख अनिवार्य रूप से घटनाओं की सूची के साथ-साथ एक ऊर्ध्वाधर एकल रेखा पर एक दिशा बनाता है जिसे अक्सर जीवन रेखा कहा जाता है । इस मामले में, प्रत्येक सूत्र स्वयं की जीवन रेखा का स्वामी है। आरेख सभी प्रकार की घटनाओं जैसे कि तुल्यकालिक, अतुल्यकालिक आदि का प्रतिनिधित्व करने की अनुमति देता है।

ऐसी प्रणालियों में अन्य सबसे महत्वपूर्ण चीज राज्य-चार्ट या राज्य-चित्र हैं। आमतौर पर, यह केवल तभी लागू होता है जब मॉडल को राज्य मशीन के रूप में दर्शाया जाता है। हालांकि, अधिकांश बहु थ्रेडेड सिस्टम (जहां धागे गैर-तुच्छ हैं) में यह सबसे अच्छा है कि वे अलग-अलग राज्यों के लिए अलग-अलग एल्गोरिदम के साथ कार्य करने के लिए डिज़ाइन किए गए हैं।

इंटरेक्शन आरेख और संचार आरेख जैसे अन्य आरेख प्रकार हैं, लेकिन मुझे लगता है कि अनुक्रम आरेख और राज्य आरेखों को आकर्षित करने की कोशिश स्पष्टता रखेगी।


6

मेरा जवाब दीपन का पूरक है कि इसमें यूएमएल अनुक्रम आरेख शामिल हैं। मैंने पाया कि एक शैली जो कि 100% शुद्ध यूएमएल नहीं है, ठीक है। Concurrency पैटर्न्स में प्रयुक्त आरेखों पर एक नज़र डालें । कुछ यूएमएल जैसे हैं (लेकिन यह निश्चित रूप से मानक नहीं है):

यहाँ छवि विवरण दर्ज करें

यदि आप जावा थ्रेड सिंक्रोनाइज़ेशन में प्रतीक्षा / सूचना से परिचित हैं, तो आप मेरे द्वारा बताए गए दस्तावेज़ से निम्नलिखित अनुक्रम आरेख की सराहना करेंगे:

यहाँ छवि विवरण दर्ज करें


यह .NET / C # पर भी लागू होता है और Visual Studio में बहु-थ्रेडेड व्यवहारों का वर्णन करने के लिए UML अनुक्रम आरेख अंतर्निहित टूलिंग होता है, जिसमें नियंत्रण प्रवाह खंड प्रकार शामिल होते हैं। Msdn.microsoft.com/en-us/library/dd465153.aspx#Anchor_1
डेविड बर्ग

0

एक ही वर्ग का उपयोग करने वाले बहु-थ्रेडेड अनुप्रयोगों के लिए, ट्रिक एक धागे का प्रतिनिधित्व करने वाले प्रत्येक मॉडल में एक ही कक्षा को खींचने और छोड़ने के लिए हो सकती है। आप अलग-अलग विचारों के साथ एक ही कक्षा में सक्षम होंगे और वर्ग, आरेख या कोड पर क्लिक करके मॉडल और कोड में नेविगेट कर सकते हैं। मुझे पता है कि मॉडल मर्ज एक अच्छी तरह से ज्ञात अवधारणा नहीं है, लेकिन यह ओमोंडो के साथ ग्रहण के भीतर वास्तव में अच्छी तरह से काम करता है।

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

मुझे नहीं पता कि यह समझ में आता है, लेकिन आप शायद एक बड़े मॉडल का निर्माण कर सकते हैं, प्रत्येक थ्रेड के लिए उप मॉडल को फिर से बनाना जैसे कि मैं मल्टी-प्रोजेक्ट मॉडलिंग के साथ क्या करूं? उममीद है कि इससे मदद मिलेगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.