2012-10-13 6 views
20

तो मैं एक साधारण पर्याप्त सांत्वना अनुप्रयोग है। जब मैं इसे चलाता हूं और कार्य प्रबंधक खोलता हूं, तो मुझे लगता है कि यह में 4 धागे हैं। यह क्यों हो रहा है भले ही मैं कोई धागा नहीं बना रहा हूं?मुफ्त एकाधिक धागे?</p> <pre><code>class Program { static void Main(string[] args) { Console.ReadKey(); } } </code></pre> <p>मैं रिलीज विन्यास के साथ यह निर्माण किया है:

यह संभवतः प्रत्येक एप्लिकेशन नहीं हो सकता है। मैंने नोटपैड खोलने की कोशिश की और इसमें केवल 1 धागा है। हालांकि यह एक मूल ऐप है और मेरा कंसोल ऐप प्रबंधित है।

कोई विचार?

+0

आपके पास हमेशा जीसी + आपके मुख्य धागे के लिए कम से कम 1 धागा है। – driis

उत्तर

17

मैं धागे आप देख रहे हैं की कल्पना की जा सकती हैं:

  1. मुख्य थ्रेड
  2. finalizer वें।
  3. In-process debugger helper thread
  4. समवर्ती जीसी थ्रेड पढ़ें।

This post कुछ विशेष सीएलआर धागे का विवरण देता है।

+0

+1, ब्लॉग पोस्ट – sll

+0

लिंक के लिए बहुत अच्छा लिंक लिंक के लिए धन्यवाद। उत्कृष्ट संसाधन! – Aniket

6

ये एप्लिकेशन के लिए बनाए गए .NET Framework थ्रेड हैं, आप विजुअल स्टूडियो 2010 थ्रेड्स डीबग विंडो का उपयोग कर सकते हैं यह देखने के लिए कि कौन से धागे प्रश्न के तहत किसी एप्लिकेशन से संबंधित हैं।

बस खाली मुख्य विधि के साथ एक बुनियादी सांत्वना आवेदन बनाया है और हम देख सकते हैं कि 8 धागे बनाए गए थे: The CLR's internal threads

Btw, नोटपैड:

enter image description here

यहाँ CLR आंतरिक धागे के बारे में दिलचस्प चर्चा देखें एक .NET Framework अनुप्रयोग नहीं है

+0

मुझे पता है, इसलिए एक थ्रेडेड .NET ऐप बनाना असंभव है? – Aniket

+0

मुझे विश्वास नहीं है क्योंकि आपके पास ऐसा कोई नियंत्रण नहीं है।नेट फ्रेमवर्क व्यवहार सिर्फ यह सोच रहा है कि क्या कोई ऐसा करने का कोई तरीका जानता है, मैं प्रबंधित अनुप्रयोगों के बारे में बात कर रहा हूं, अप्रबंधित – sll

+0

के बारे में सुनिश्चित नहीं हूं कि मैं पुष्टि कर सकता हूं कि एक मूल ऐप (सी/सी ++) में केवल एक धागा है। बस कोशिश की। – Aniket

3

.NET Framework हमेशा किसी प्रोग्राम की शुरुआत में कुछ धागे शुरू करता है:

  1. आपका मुख्य थ्रेड (जाहिर है)
  2. कचरा संग्रहण धागा
  3. JIT धागा।
1

सामान्य COM अनुप्रयोग और प्रबंधित एप्लिकेशन के बीच एक बुनियादी अंतर है। यह कचरा संग्रह है।

प्रत्येक प्रक्रिया में इसके साथ जुड़े फ़ाइनेंजर थ्रेड होते हैं, जैसे कि आपके एप्लिकेशन में फ़ाइनलाइज़र केवल उस थ्रेड पर चलता है।

तो धागे हैं: 1. मुख्य थ्रेड (जो आपके आवेदन पैदा कर दी है) 2. finalizer थ्रेड (कचरा कलेक्टर द्वारा प्रयोग किया जाता 3. JIT थ्रेड (मक्खी पर JIT कोड)

करते थे। अन्य थ्रेड SysEvents आदि

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