BackgroundWorker थ्रेड पूल थ्रेड के समान ही है। यह यूआई थ्रेड पर ईवेंट चलाने की क्षमता जोड़ता है। प्रगति दिखाने और परिणाम के साथ यूआई को अद्यतन करने के लिए बहुत उपयोगी है। तो इसका सामान्य उपयोग यूआई को फ्रीजिंग से रोकने के लिए है जब काम करने की जरूरत है। प्रदर्शन पहला लक्ष्य नहीं है, चल रहा कोड असीमित रूप से है। इस पैटर्न को बाद में .NET संस्करणों में कार्य <> कक्षा और async/प्रतीक्षा कीवर्ड द्वारा विस्तारित किया गया है।
थ्रेड पूल थ्रेड संसाधनों से बचने के लिए उपयोगी हैं। एक थ्रेड एक महंगा ऑपरेटिंग सिस्टम ऑब्जेक्ट है और आप उनमें से बहुत सीमित संख्या बना सकते हैं। एक धागा 5 ऑपरेटिंग सिस्टम हैंडल और वर्चुअल मेमोरी एड्रेस स्पेस का मेगाबाइट लेता है। जल्दी से इन हैंडल को जारी करने के लिए कोई निपटान() विधि नहीं। थ्रेड पूल मुख्य रूप से धागे का पुन: उपयोग करने के लिए मौजूद है और यह सुनिश्चित करने के लिए कि उनमें से बहुत से सक्रिय नहीं हैं। यह महत्वपूर्ण है कि आप केवल थ्रेड पूल थ्रेड का उपयोग करें जब यह काम सीमित हो, आदर्श रूप से आधे सेकेंड से अधिक नहीं लेना। और अक्सर अवरुद्ध नहीं। इसलिए यह काम के छोटे विस्फोटों के लिए सबसे उपयुक्त है, प्रदर्शन के मामले में कुछ भी नहीं। हैंडलिंग I/O पूरा करना एक टीपी थ्रेड के लिए एक आदर्श कार्य है।
हां, किसी प्रोग्राम के प्रदर्शन को बेहतर बनाने के लिए धागे का उपयोग करना भी संभव है। आप थ्रेड या कार्य <> का उपयोग करके ऐसा करेंगे जो टास्ककंटिन्यूशनऑप्शन का उपयोग करता है। लोंगरिंग। कुछ कठोर आवश्यकताओं वास्तव में एक प्रदर्शन में सुधार लाने के लिए कर रहे हैं, वे बहुत कठोर हैं:
- आप अधिक एक थ्रेड से की जरूरत है। एक आदर्श मामले में, नौकरी पाने के लिए दो धागे आधे समय की आवश्यकता हो सकती है। और कम, आप जितने अधिक धागे का उपयोग करते हैं। उस आदर्श के करीब हालांकि मुश्किल है, यह असीमित पैमाने पर नहीं है। जानकारी के लिए Google "Amdahl कानून"।
- आपको एक प्रोसेसर वाली मशीन की आवश्यकता है जिसमें एकाधिक कोर हैं। इन दिनों पाने में आसान है। आपके द्वारा बनाए गए धागे की संख्या उपलब्ध कोर की संख्या से अधिक नहीं होनी चाहिए। अधिक उपयोग करना आमतौर पर निचला प्रदर्शन होगा।
- आपको ऐसे प्रकार की नौकरी की आवश्यकता है जो गणना की जाती है, प्रोसेसर का निष्पादन इंजन बाधित संसाधन हो। यह काफी आम है लेकिन निश्चित रूप से कोई स्लैमडंक नहीं है। कई नौकरियां वास्तव में I/O थ्रूपुट द्वारा सीमित होती हैं, जैसे फ़ाइल या डीबेस क्वेरी से पढ़ना। या उस दर से सीमित हैं जिस पर प्रोसेसर रैम से डेटा पढ़ सकता है। ऐसी नौकरियों को थ्रेड से लाभ नहीं होता है, आपके पास एकाधिक निष्पादन इंजन उपलब्ध होंगे लेकिन आपके पास अभी भी केवल एक डिस्क और एक मेमोरी बस है।
- आपको एक एल्गोरिदम की आवश्यकता है जो सिंक्रनाइज़ेशन के लिए शायद ही कभी आवश्यकता के बिना कई धागे में काम वितरित कर सके। आमतौर पर हल करने में मुश्किल समस्या होती है, कई एल्गोरिदम प्रकृति में बहुत अनुक्रमिक होते हैं और आसानी से समानांतर नहीं होते हैं।
- कोड को स्थिर और अच्छी तरह से प्रदर्शन करने के लिए आपको समय और धैर्य की आवश्यकता होगी। थ्रेडेड कोड लिखना हार्ड और एक थ्रेडिंग रेस जो महीने में एक बार आपके प्रोग्राम को क्रैश करता है, या कभी-कभी एक अवैध परिणाम उत्पन्न करता है, यह एक प्रमुख समय सिंक हो सकता है।
स्रोत
2013-06-09 13:16:46
यह उन पर निर्भर करता है कि उनका उपयोग कैसे किया जाए, इसका उपयोग न करें। – I4V