कोऑपरेटिव मल्टीटास्किंग
कोऑपरेटिव मल्टीटास्किंग (बहुकार्यन), जिसे नॉन-प्रीमेप्टिव मल्टीटास्किंग के रूप में भी जाना जाता है, कंप्यूटर मल्टीटास्किंग की एक शैली है जिसमें ऑपरेटिंग सिस्टम कभी भी किसी चल रही प्रक्रिया से दूसरी प्रक्रिया में संदर्भ स्विच नहीं करता है। इसके बजाय, कई अनुप्रयोगों को समवर्ती रूप से चलाने के लिए, प्रक्रिया स्वेच्छा से समय-समय पर या निष्क्रिय या तार्किक रूप से अवरुद्ध होने पर नियंत्रण प्राप्त करती है। इस प्रकार के मल्टीटास्किंग को कोऑपरेटिव कहा जाता है क्योंकि शेड्यूलिंग स्कीम के काम करने के लिए सभी प्रोग्रामों को सहयोग करना चाहिए।
इस योजना में, ऑपरेटिंग सिस्टम के प्रोसेस शेड्यूलर को कोऑपरेटिव शेड्यूलर के रूप में जाना जाता है, जिसकी भूमिका प्रक्रियाओं को प्रारम्भ करने और उन्हें स्वेच्छा से नियंत्रण वापस करने देने तक सीमित होती है।[1][2]
उपयोग
यद्यपि यह आधुनिक ऑपरेटिंग सिस्टम में प्राथमिक शेड्यूलिंग तंत्र के रूप में शायद ही कभी उपयोग किया जाता है, यह व्यापक रूप से मेमोरी कंस्ट्रेंड एम्बेडेड सिस्टम में और सीआईसी या जेईएस 2 सबसिस्टम जैसे विशिष्ट अनुप्रयोगों में भी उपयोग किया जाता है। विंडोज 95 और विंडोज एनटी से पहले माइक्रोसॉफ़्ट विंडोज़ और क्लासिक मैक ओएस द्वारा नियोजित 16-बिट अनुप्रयोगों के लिए कोऑपरेटिव मल्टीटास्किंग प्राथमिक शेड्यूलिंग योजना थी। विंडोज 9x ने 16-बिट विरासत अनुप्रयोगों के लिए नॉन-प्रीमेप्टिव मल्टीटास्किंग का उपयोग किया, और तेंदुए से पहले मैक ओएस एक्स के पावरपीसी संस्करणों ने क्लासिक अनुप्रयोगों के लिए इसका उपयोग किया।[1] नेटवेयर, जो नेटवर्क-उन्मुख ऑपरेटिंग सिस्टम है, ने नेटवेयर 6.5 तक कोऑपरेटिव मल्टीटास्किंग का उपयोग किया। कोऑपरेटिव मल्टीटास्किंग अभी भी आरआईएससी ओएस सिस्टम पर प्रयोग किया जाता है।[3]
कोऑपरेटिव मल्टीटास्किंग का उपयोग भाषाओं में इंतजार के साथ किया जाता है, जैसे कि जावास्क्रिप्ट या पायथन, जो अपने रनटाइम में सिंगल-थ्रेडेड इवेंट लूप की सुविधा देते हैं। यह ऑपरेटिंग सिस्टम कोऑपरेटिव मल्टीटास्किंग के विपरीत है क्योंकि प्रतीक्षा केवल फ़ंक्शन या ब्लॉक तक सीमित है, जिसका अर्थ है कि अन्य फ़ंक्शन कोड के अन्य भागों में समवर्ती रूप से चल सकते हैं, जबकि एकल फ़ंक्शन प्रतीक्षा कर रहा है।[4][5] अधिकांश आधुनिक भाषाओं में, एसिंक और प्रतीक्षा को कोरआउट के रूप में लागू किया जाता है।
समस्याएं
एक सहयोगी रूप से मल्टीटास्क्ड सिस्टम नियमित रूप से अन्य प्रक्रियाओं के लिए समय देते हुए प्रत्येक प्रक्रिया पर निर्भर करता है, एक खराब डिज़ाइन किया गया प्रोग्राम व्यापक गणना करके या प्रतीक्षा में व्यस्त होकर सभी सीपीयू समय का उपभोग कर सकता है; दोनों पूरे सिस्टम को हैंग करने का कारण बनेंगे। एक सर्वर परिस्थिति में, यह खतरा पूरे परिस्थिति को अस्वीकार्य रूप से भंगुर बना देता है।[1]
इसके विपरीत, प्रीमेप्टिव मल्टीटास्किंग एप्लिकेशन को बाधित करता है और एप्लिकेशन के नियंत्रण से बाहर की अन्य प्रक्रियाओं को नियंत्रण देता है।
सिस्टम हैंग होने की संभावना को वॉचडॉग टाइमर का उपयोग करके कम किया जा सकता है, जिसे प्रायः हार्डवेयर में लागू किया जाता है; यह सामान्यतः हार्डवेयर रीसेट का आह्वान करता है।
कोऑपरेटिव मल्टीटास्किंग अनुप्रयोगों के बहुत सरल कार्यान्वयन की अनुमति देता है क्योंकि प्रक्रिया अनुसूचक द्वारा उनका निष्पादन कभी भी अप्रत्याशित रूप से बाधित नहीं होता है; उदाहरण के लिए, एप्लिकेशन के अंदर विभिन्न कार्यों को पुनः प्रवेश करने की आवश्यकता नहीं है।[2]
यह भी देखें
- प्रीमेप्टिव मल्टीटास्किंग
संदर्भ
- ↑ 1.0 1.1 1.2 "Definition of non-preemptive multitasking". pcmag.com. Retrieved August 15, 2015.
- ↑ 2.0 2.1 Joe Bartel (November 5, 2011). "Non-Preemptive Multitasking" (PDF). classiccmp.org. Archived from the original (PDF) on August 19, 2019. Retrieved August 15, 2015.
- ↑ "Preemptive multitasking". riscos.info. November 2, 2009. Retrieved August 15, 2015.
- ↑ Kerkour, Sylvain (January 25, 2022). "Async Rust: Cooperative vs Preemptive scheduling". Retrieved January 30, 2023.
- ↑ Skvortsov, Victor. "Python behind the scenes #12: How async/await works in Python". Retrieved January 30, 2023.