क्या कोई प्रीपेप्टिव थ्रेडिंग मॉडल और गैर प्रीपेप्टिव थ्रेडिंग मॉडल के बीच अंतर को समझा सकता है?प्रीपेप्टिव थ्रेड्स बनाम गैर प्रीपेप्टिव थ्रेड्स
मेरी समझ के अनुसार:
- गैर पूर्वक्रमिक सूत्रण मॉडल: एक बार एक धागा शुरू कर दिया है यह या रोका नहीं जा सकता जब तक धागा अपने कार्य को पूरा कर लिया है नियंत्रण अन्य थ्रेड को हस्तांतरित नहीं किया जा सकता है।
- प्रीपेप्टिव थ्रेडिंग मॉडल: रनटाइम को किसी भी समय एक थ्रेड से दूसरे में नियंत्रण और हाथ नियंत्रण करने की अनुमति है। लोअर प्राथमिकता धागे पर उच्च प्राथमिकता धागे को प्राथमिकता दी जाती है।
किसी कृपया:
- के बारे में बताएं, तो समझ सही है।
- दोनों मॉडलों के फायदे और नुकसान बताएं।
- उपयोग करने के लिए एक उदाहरण वास्तव में सहायक क्या होगा।
- यदि मैं किसी भी विकल्प का उल्लेख किए बिना लिनक्स (सिस्टम वी या पर्थ्रेड) में कोई थ्रेड बना देता हूं (क्या कोई है ??) डिफ़ॉल्ट रूप से इस्तेमाल किया गया थ्रेडिंग मॉडल प्रीपेप्टिव थ्रेडिंग मॉडल है?
उपज() के बारे में सिर्फ एक नोट: लिनक्स पर इसका उपयोग न करें क्योंकि इसका परिणाम भयानक प्रदर्शन में होता है। एक उपजित थ्रेड थ्रेड शेड्यूल के बहुत पीछे धकेल दिया जाता है, इसलिए थ्रेड तब तक निर्धारित नहीं होगा जब तक कि पूरे सिस्टम में बाकी सब कुछ * का मौका न हो। –
मेरी समझ में जब मुख्य प्रक्रिया दो धागे बनाती है, तो वे समानांतर में निष्पादित होंगे। तो क्या "गैर प्रीपेप्टिव थ्रेडिंग मॉडल" निष्पादन को बनाता है, (finish_thread_1) -> (finish_thread_2) -> मुख्य()? मेरा मतलब है कि थ्रेड 1 समाप्त होने के बाद पूरी तरह से थ्रेड 2 पूरा होने के बाद शुरू होगा, मुख्य() विधि कॉल करेगी। क्या ये सही है? यदि ऐसा है तो "गैर प्रीपेप्टिव थ्रेड" का उपयोग क्या है? – rakeshNS
@ राकेशंस: गैर-प्रीपेप्टिव (सहकारी) धागे का मतलब है कि एक धागा तब तक चलता है जब तक कि यह कुछ फ़ंक्शन को कॉल न करे जो स्विच को किसी अन्य थ्रेड पर अनुमति देता है। कुछ मामलों में, यह एक स्पष्ट 'उपज' समारोह है। दूसरों में, अन्य धागे चलाने की इजाजत देना कुछ अन्य कार्यों में निहित है।उदाहरण के लिए, 16-बिट विंडोज़ में, जब आप 'GetMessage' कहलाते हैं, तो अन्य थ्रेड/प्रक्रियाएं चल सकती हैं (उन्हें प्रक्रिया माना जाता था, लेकिन वे सभी एक पता स्थान साझा करते थे ...) –