हमारे पास रीयल-टाइम सी # एप्लिकेशन के पास एक बहुत ही उच्च प्रदर्शन मल्टीटास्किंग है। यह प्रदर्शन प्राथमिक रूप से घर के उगाए गए शेड्यूलर के साथ सहकारी मल्टीटास्किंग इन-हाउस को कार्यान्वित करके हासिल किया गया था। इसे अक्सर सूक्ष्म धागे कहा जाता है। इस प्रणाली में सभी कार्य कतारों के माध्यम से अन्य कार्यों के साथ संवाद करते हैं।सी # सी ++ इंटरऑप या किसी अन्य तरीके के माध्यम से प्रथम श्रेणी निरंतरता?
हमें जो विशिष्ट समस्या है, वह केवल प्रथम श्रेणी की निरंतरताओं के माध्यम से हल हो सकती है जो सी # समर्थन नहीं करता है।
विशेष रूप से समस्या कतारों से निपटने वाले 2 मामलों में उत्पन्न होती है। जब भी कोई विशेष कार्य कतार पर कोई आइटम रखने से पहले कुछ काम करता है। अगर कतार भरा हुआ है तो क्या होगा?
इसके विपरीत, एक अलग कार्य कुछ काम कर सकता है और फिर एक कतार के एक आइटम को बंद करने की आवश्यकता है। क्या होगा यदि वह कतार खाली है?
हमने कतारों को कार्यों से जोड़ने के लिए 90% मामलों में हल किया है ताकि उनके आउटबाउंड कतार पूर्ण हो या इनबाउंड कतार खाली हो।
इसके अलावा कुछ कार्यों को राज्य मशीनों में परिवर्तित कर दिया गया ताकि वे कतार पूर्ण/खाली हो और प्रतीक्षा किए बिना जारी रख सकें।
वास्तविक समस्या कुछ किनारे के मामलों में उत्पन्न होती है जहां उन समाधानों में से किसी एक को अव्यवहारिक होता है। उस परिदृश्य में विचार बिंदु पर स्टैक स्थिति को सहेजना होगा और एक अलग कार्य पर स्विच करना होगा ताकि यह काम कर सके और बाद में जब भी यह जारी रखने में सक्षम हो, प्रतीक्षा कार्य को पुनः प्रयास करें।
अतीत में, हमने अन्य कार्यों को प्रतीक्षा करने और बाद में प्रतीक्षा कार्य को पुनः प्रयास करने के लिए प्रतीक्षा कार्य को अनुसूची (रिकर्सिवली) में वापस कॉल करने का प्रयास किया था। हालांकि, इससे बहुत अधिक "डेडलॉक" परिस्थितियां हुईं।
.NET थ्रेड वास्तव में "फाइबर" के रूप में काम करने के लिए एक कस्टम सीएलआर होस्ट का एक उदाहरण था जो अनिवार्य रूप से थ्रेड के बीच स्टैक स्थिति स्विच करने की अनुमति देता है। लेकिन अब मुझे इसके लिए कोई नमूना कोड नहीं मिल रहा है। इसके अलावा ऐसा लगता है कि इसे सही करने के लिए कुछ महत्वपूर्ण जटिलताएं लेंगी।
क्या किसी के पास रचनात्मक रूप से कार्यों के बीच स्विच करने और उपर्युक्त समस्याओं से बचने के लिए कोई अन्य रचनात्मक विचार है?
क्या कोई अन्य सीएलआर होस्ट है जो इसे वाणिज्यिक, अन्यथा प्रदान करता है? क्या कोई ऐड-ऑन देशी लाइब्रेरी है जो सी # के लिए निरंतरता के कुछ रूप प्रदान कर सकती है?
फाइबर मोड सीएलआर होस्ट नमूना - आप इस बारे में डिनो विहलैंड की ब्लॉग श्रृंखला का जिक्र कर रहे हैं, जो यहां शुरू होता है: http://blogs.msdn.com/b/dinoviehland/archive/2004/08/16/215140। एएसपीएक्स – bobbymcr
नाइट: डेडलॉक एक दक्षता मुद्दा नहीं है। यह एक शुद्धता मुद्दा है। (इसके अलावा, एक पूर्ण अनबाउंड कतार और कोई और स्मृति के बीच क्या अंतर है? राज्य राज्य है और कहीं भी संग्रहीत किया जाना चाहिए।) –
हम सी # 5 के लिए निरंतरता का एक रूप जोड़ रहे हैं। हालांकि वे बिल्कुल प्रथम श्रेणी के कॉल/सीसी-शैली निरंतरता, वे नैतिक रूप से समकक्ष हैं। इसकी पूर्वावलोकन रिलीज के लिए "async CTP" देखें। http://msdn.microsoft.com/en-us/vstudio/gg316360.aspx। एसिंक फीचर की प्रदर्शन विशेषताओं पर स्टीफन टब के हालिया एमएसडीएन पत्रिका लेख को भी देखें। –