/ / एक ही प्रक्रिया के अंदर धागे कितने स्वतंत्र हैं? - बहुआयामी, भाषा-अज्ञेय

एक ही प्रक्रिया के अंदर धागे कितने स्वतंत्र हैं? - बहुप्रचार, भाषा-अज्ञेयवादी

अब, यह एक बहुत ही नौसिखिया सवाल हो सकता है, लेकिन मुझे वास्तव में मल्टीथ्रेडेड प्रोग्रामिंग के साथ अनुभव नहीं है और मैं पूरी तरह से समझ गया हूं कि थ्रेड प्रक्रियाओं की तुलना में कैसे काम करते हैं।

जब मेरी मशीन पर कोई प्रक्रिया लटकती है, तो यह कहें किकुछ IO की प्रतीक्षा में जो कभी भी या कुछ समान नहीं होता है, मैं इसे मार सकता हूं और फिर से शुरू कर सकता हूं क्योंकि अन्य प्रक्रियाएं "टी प्रभावित और कर सकती हैं, उदाहरण के लिए, अभी भी मेरे टर्मिनल का संचालन करती हैं। यह बहुत स्पष्ट है, ज़ाहिर है।

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

उत्तर:

उत्तर № 1 के लिए 4

धागे स्वतंत्र हैं, लेकिन एक अंतर हैएक प्रक्रिया और एक सूत्र के बीच, और वह यह है कि प्रक्रियाओं के मामले में, ऑपरेटिंग सिस्टम इसे केवल "मार" से अधिक करता है। इसके बाद सफाई भी करता है।

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

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

तो आपके सवाल का असली जवाब है: नहीं, आप मुश्किल तरीके से धागों को नहीं मार सकते।

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


उत्तर № 2 के लिए 1

यदि एक धागा लटका रहता है, तो अन्य जारी रहेंगेअमल करना। हालाँकि, यदि थ्रेड थ्रेड ने एक सेमाफ़ोर, क्रिटिकल सेक्शन या अन्य प्रकार के सिंक्रोनाइज़ेशन ऑब्जेक्ट को लॉक कर दिया है, और दूसरा थ्रेड उसी सिंक्रोनाइज़ेशन ऑब्जेक्ट को लॉक करने का प्रयास करता है, तो अब आपके पास दो डेड थ्रेड के साथ एक डेडलॉक है।

एक धागे से अन्य धागे की निगरानी करना संभव है। आपके प्लेटफ़ॉर्म के आधार पर, सराहनीय एपीआई "है: मैं आपको उन लोगों के रूप में संदर्भित करता हूं, जिनके लिए आप ओएस लिख रहे हैं।


जवाब के लिए 0 № 3

आपने मंच के बारे में उल्लेख नहीं किया, लेकिन जहाँ तकजैसा कि मैं चिंतित हूं, NT कर्नेल शेड्यूल करता है, प्रक्रियाओं को नहीं और उन्हें उस तरीके से स्वतंत्र रूप से धमकी देता है। यह अन्य प्लेटफार्मों पर नहीं हो सकता है और सच नहीं है (कुछ प्लेटफ़ॉर्म, जैसे विंडोज 3.1, प्रीमेप्टिव मल्टीथ्रेडिंग का उपयोग नहीं करते हैं और यदि आपका धागा जाता है। अनंत लूप में, सब कुछ प्रभावित होता है)।


जवाब के लिए 0 № 4

सरल उत्तर है हां।

आमतौर पर यद्यपि एक थ्रेड में कोड इस संभावित हुड को स्वयं संभाल लेगा। अधिकांश आमतौर पर कई एपीआई जो ऑपरेशन करते हैं जो लटका सकते हैं उनकी अपनी समयबाह्य विशेषताएं होंगी।

वैकल्पिक रूप से एक धागा न केवल उस ऑपरेशन पर इंतजार करेगा जो लटका सकता है, बल्कि एक टाइमर भी हो सकता है। यदि टाइमर पहले संकेत देता है तो यह माना जाता है कि ऑपरेशन लटका हुआ है।

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


जवाब के लिए 0 № 5

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


जवाब के लिए 0 № 6

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

http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html

यदि आपको चीजों को मारने में सक्षम होने की आवश्यकता है, तो प्रक्रियाओं का उपयोग करें।