2013-02-22 52 views
6

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

एक प्रयोग के रूप में मैंने एक नया खाली WPF अनुप्रयोग प्रोजेक्ट बनाया, और इसे मेरे आश्चर्य के लिए फिर से कंसुरेंसी विजुअलाइजर के साथ चलाया, एक ऐसा एप्लिकेशन जिसे मैंने एक मुख्य धागा होने की उम्मीद की थी, और शायद कचरा संग्रह के लिए एक या दो और या अन्य सीएलआर सामान, 10 धागे के लिए बाहर निकलता है!

Screenshot of Concurrency Visualizer showing 10 threads in a simple WPF Application

तो मेरी प्रश्न हैं:

  1. क्यों एक बहुत ही सरल आवेदन में इतने सारे धागे कर रहे हैं?
  2. आम तौर पर इन धागे के कार्यों क्या हैं?
  3. वे अपने पूरे समय "सिंक्रनाइज़ेशन" क्यों खर्च कर रहे हैं?
  4. इस विषय को कवर करने वाली पुस्तक/वेबसाइट के लिए कोई सिफारिशें?

उत्तर

0

यहाँ उस सवाल के लिए एक अच्छा जवाब है, जैरी Bullard के द्वारा होता है: 19 Threads for WPF Application

तो, WPF यूआई और प्रतिपादन धागे की के अलावा, वहाँ नेट धागे के विभिन्न प्रकार हैं: finalizer, जीसी, डिबगर, टाइमर, थ्रेडपूल, प्राथमिक और पृष्ठभूमि धागे। थ्रेडपूल में कम से कम दो धागे हैं। यह सब हमें कम से कम 10 धागे देता है (बस आपके स्क्रीनशूट में)।