2009-05-06 17 views
5

मुझे कुछ महान लेख मिल गए हैं (Maoni, Richter #1, Richter #2) जीसी के सिद्धांत और अभ्यास के रूप में कई विवरण दे रहे हैं, फिर भी मुझे कुछ भी नहीं मिला है जो बताता है कि जीसी की धागा प्राथमिकता कैसे निर्धारित की जाती है।.NET कचरा कलेक्टर - इसकी धागा प्राथमिकता क्या है?

निकटतम मैंने पाया

यह एक है जो यह बताता finalizer धागा "runs asynchronously to the application and at a high priority."

मुझे हमेशा यही लगता है कि है कि यह एक "कम प्राथमिकता" धागा था, लेकिन है अधिक से इसके बारे में अधिक है कि गलत हो रहा है पढ़ने (चूंकि जीसी को आपके सभी अन्य धागे को अवरुद्ध करना है, और आप समय-समय पर फिर से शुरू करने के लिए अपना ऐप कम प्राथमिकता वाले थ्रेड पर निर्भर नहीं होना चाहते हैं)।

किसी को यकीन है कि पता करने के लिए क्या वास्तविक प्राथमिकता माना जाता है पता है?

उत्तर

9

सी # के माध्यम से CLR में, रिक्टर बताते हैं कि:

एक विशेष उच्च प्राथमिकता CLR धागा Finalize तरीकों

("अंतिम रूप देना Internals" देख अध्याय के शीर्षक बुला के लिए समर्पित है 20)

यह केवल संदर्भ में वह एक कचरा कलेक्टर धागा बारे में बात करती है। एक छोटी सी अध्याय में पहले, वे बताते हैं कि कचरा संग्रहण निम्नलिखित घटनाओं में से एक के जवाब में शुरू कर दिया गया है:

  • पीढ़ी 0
  • कॉल GC.Collect को भरा हुआ है
  • विंडोज कम स्मृति की स्थिति
  • रिपोर्ट कर रहा है
  • CLR एक AppDomain
  • CLR नीचे

बंद हो रहा है ... जिससे पता चलता है उतारने है कि कचरा कलेक्टर द्वारा निर्मित एकमात्र धागा यह एकल, "उच्च प्राथमिकता" फाइनलाइज़र थ्रेड है।

संपादित करें: इसके बाद वे पर चला जाता है, "समवर्ती संग्रह" में, समझाने के लिए कि:

एक मल्टीप्रोसेसर निष्पादन इंजन की कार्यस्थान संस्करण चला प्रणाली पर, कचरा कलेक्टर एक अतिरिक्त पृष्ठभूमि धागा है आवेदन चलाने के दौरान वस्तुओं को एक साथ इकट्ठा करने के लिए। [...] कचरा कलेक्टर की सामान्य प्राथमिकता पृष्ठभूमि धागा है जो पहुंचने योग्य वस्तुओं को चिह्नित करता है।

+0

यह एक पूर्ण उत्तर के करीब लगता है जैसा कि मुझे मिल सकता है। मैं इसे थोड़ी देर तक छोड़ दूंगा, लेकिन मुझे लगता है कि यह ऐसा कर सकता है। धन्यवाद! हर रोज कुछ नया सीखो, हुह? शायद मुझे अपनी किताब खरीदनी चाहिए। –

+1

मैं निश्चित रूप से अपनी पुस्तक की सिफारिश कर सकता हूं - यह दिलचस्प पृष्ठभूमि जानकारी है, और यह मुझे कुछ विशिष्ट समस्याओं पर सहेजा गया है। –

+0

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

5

जीसी धागा एक सामान्य प्राथमिकता पर चलाता है। फाइनलज़र थ्रेड "सर्वोच्च" प्राथमिकता पर चलता है।

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

+0

समझ बनाने के लिए लगता है कि (जीसी के लिए सामान्य है, तो के रूप में पूर्व empted किया जा रहा बिना वापस पाने के लिए finalizer के लिए उच्चतम):

इस सवाल का जवाब एक ब्लॉग पोस्ट मैं लिखा है में निहित है । मुझे आश्चर्य है कि एमएसडीएन पर कहीं भी इसकी व्याख्या क्यों नहीं की गई है। क्या आप थ्रेड विंडो को फायर करने की तुलना में कुछ और "औपचारिक" ढूंढ पाए हैं? –

+0

मुझे कुछ भी विशिष्ट नहीं पता है। मैंने कुछ समय पहले रिको मारियानी ने पर्फ के बारे में बात करते हुए एक सम्मेलन की बातचीत में कुछ के बारे में सीखा। .NET में - हालांकि, अधिकांश एमएसडीएन दस्तावेज़ मूल रूप से जीसी आंतरिकों को अनदेखा करते हैं और केवल उन पर भरोसा करते हैं - और उन पर भरोसा नहीं करते हैं, क्योंकि वे किसी भी बिंदु पर बदल सकते हैं (और इसमें अतीत)। –

0

कचरा कलेक्टर महत्वपूर्ण सूत्र

0

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

संबंधित मुद्दे