कोऑपरेटिव मल्टीटास्किंग

सहकारी मल्टीटास्किंग, जिसे गैर-प्रीमेप्टिव मल्टीटास्किंग के रूप में भी जाना जाता है, कंप्यूटर मल्टीटास्किंग की एक शैली है जिसमें ऑपरेटिंग सिस्टम कभी भी चल रही प्रक्रिया (कंप्यूटिंग) से दूसरी प्रक्रिया में संदर्भ स्विच शुरू नहीं करता है। इसके बजाय, कई अनुप्रयोगों को समवर्ती रूप से चलाने के लिए, स्वैच्छिक रूप से उपज (मल्टीथ्रेडिंग)  को समय-समय पर या जब निष्क्रिय या तार्किक रूप से ब्लॉकिंग_ (कंप्यूटिंग) किया जाता है। इस प्रकार की मल्टीटास्किंग को सहकारी कहा जाता है क्योंकि शेड्यूलिंग योजना के काम करने के लिए सभी कार्यक्रमों को सहयोग करना चाहिए।

इस योजना में, एक ऑपरेटिंग सिस्टम के प्रक्रिया अनुसूचक  को एक सहकारी शेड्यूलर के रूप में जाना जाता है, जिसकी भूमिका प्रक्रियाओं को शुरू करने और उन्हें स्वेच्छा से नियंत्रण वापस करने देने तक सीमित है।

उपयोग
यद्यपि यह आधुनिक ऑपरेटिंग सिस्टम में प्राथमिक शेड्यूलिंग तंत्र के रूप में शायद ही कभी उपयोग किया जाता है, यह व्यापक रूप से स्मृति-विवश अंतः स्थापित प्रणाली में और CICS या JES2 सबसिस्टम जैसे विशिष्ट अनुप्रयोगों में भी उपयोग किया जाता है। सहकारी मल्टीटास्किंग विंडोज 95 और विंडोज एनटी से पहले माइक्रोसॉफ़्ट विंडोज़  और क्लासिक (मैक ओएस एक्स) नियोजित 16-बिट अनुप्रयोगों के लिए प्राथमिक शेड्यूलिंग योजना थी। Windows 9x ने 16-बिट लीगेसी अनुप्रयोगों के लिए गैर-प्रीमेप्टिव मल्टीटास्किंग का उपयोग किया, और Mac OS X v10.5 से पहले के Mac OS X के PowerPC संस्करणों ने क्लासिक (Mac OS X) अनुप्रयोगों के लिए इसका उपयोग किया।  NetWare, जो एक नेटवर्क-उन्मुख ऑपरेटिंग सिस्टम है, ने NetWare 6.5 तक सहकारी मल्टीटास्किंग का उपयोग किया। सहकारी मल्टीटास्किंग का उपयोग अभी भी आरआईएससी ओएस सिस्टम पर किया जाता है। सहकारी मल्टीटास्किंग का उपयोग जावास्क्रिप्ट या पायथन (प्रोग्रामिंग लैंग्वेज) जैसी भाषाओं में प्रतीक्षा के साथ किया जाता है, जो अपने रनटाइम में सिंगल-थ्रेडेड इवेंट-लूप की सुविधा देते हैं। यह ऑपरेटिंग सिस्टम कोऑपरेटिव मल्टीटास्किंग के विपरीत है, क्योंकि प्रतीक्षा केवल फ़ंक्शन या ब्लॉक तक सीमित है, जिसका अर्थ है कि अन्य कार्य कोड के अन्य भागों में समवर्ती रूप से चल सकते हैं, जबकि एक एकल फ़ंक्शन प्रतीक्षा कर रहा है। अधिकांश आधुनिक भाषाओं में, async और प्रतीक्षा को कोरटाइन के रूप में कार्यान्वित किया जाता है।

समस्याएं
एक सहयोगी रूप से मल्टीटास्क्ड सिस्टम सिस्टम पर अन्य प्रक्रियाओं को नियमित रूप से समय देने वाली प्रत्येक प्रक्रिया पर निर्भर करता है, एक खराब डिज़ाइन किया गया प्रोग्राम अपने लिए सभी CPU समय का उपभोग कर सकता है, या तो व्यापक गणना करके या व्यस्त प्रतीक्षा करके; दोनों पूरे सिस्टम को हैंग (कंप्यूटिंग) करने का कारण बनेंगे। एक सर्वर (कंप्यूटिंग) वातावरण में, यह एक ऐसा खतरा है जो पूरे वातावरण को अस्वीकार्य रूप से नाजुक बना देता है। इसके विपरीत, प्रीमेशन (कंप्यूटिंग) मल्टीटास्किंग अनुप्रयोगों को बाधित करता है और एप्लिकेशन के नियंत्रण से बाहर की अन्य प्रक्रियाओं को नियंत्रण देता है।

निगरानी घड़ी का उपयोग करके सिस्टम हैंग होने की संभावना को कम किया जा सकता है, जिसे अक्सर हार्डवेयर में लागू किया जाता है; यह आमतौर पर एक हार्डवेयर रीसेट को आमंत्रित करता है।

सहकारी मल्टीटास्किंग अनुप्रयोगों के बहुत सरल कार्यान्वयन की अनुमति देता है क्योंकि उनका निष्पादन प्रक्रिया अनुसूचक द्वारा कभी भी अप्रत्याशित रूप से बाधित नहीं होता है; उदाहरण के लिए, एप्लिकेशन के अंदर विभिन्न सबरूटीन को रीएन्ट्रेंसी (कंप्यूटिंग) होने की आवश्यकता नहीं है।

यह भी देखें

 * प्रीमेप्टिव मल्टीटास्किंग

संदर्भ
Multitasking