2011-03-17 21 views
13

जब आप किसी एप्लिकेशन में थ्रेड का उपयोग करते हैं? उदाहरण के लिए, सरल सीआरयूडी परिचालनों में, एसएमटीपी का उपयोग, वेब सर्विसेज को कॉल करना, यदि सर्वर बैंडविड्थ के मुद्दों का सामना कर रहा है, तो कुछ समय लग सकता है।मल्टीथ्रेड का उपयोग कब करें?

ईमानदार होने के लिए, मुझे नहीं पता कि मुझे यह निर्धारित करने के लिए कि मुझे क्या करना है एक थ्रेड का उपयोग करें (मुझे पता है कि यह तब होना चाहिए जब हम यह छोड़ रहे हों कि एक ऑपरेशन करने में कुछ समय लगेगा)।

यह "नोब" प्रश्न हो सकता है लेकिन यदि आप मेरे साथ धागे में अपना अनुभव साझा करते हैं तो यह बहुत अच्छा होगा।

धन्यवाद

+0

आप वास्तव में क्या करने की कोशिश कर रहे हैं। हमारे लिए यह बताने में आसान हो सकता है कि धागे आपकी समस्या का समाधान करने में मदद करते हैं या नहीं। अन्यथा यह प्रश्न "वास्तविक प्रश्न के रूप में बंद" के लिए उम्मीदवार की तरह दिख रहा है। –

+0

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

+0

मुझे संसाधन परिप्रेक्ष्य से बहु-थ्रेडिंग परिदृश्य देखना पसंद है। दूसरे शब्दों में, यूआई (ग्राफिक्स), नेटवर्किंग, डिस्क आईओ, सीपीयू (कोर), रैम इत्यादि। मुझे लगता है कि कम से कम सामान्य अर्थ में बहु-थ्रेडिंग का उपयोग करने का निर्णय लेने में सहायता करता है। महान सवाल बीटीडब्ल्यू। नोब या अन्यथा :-) – bic

उत्तर

7

मैंने सी # और जोड़ा।आपके प्रश्न में नेट टैग क्योंकि आप अपने शीर्षक में सी # का उल्लेख करते हैं। यदि यह सटीक नहीं है, तो टैग को हटाने के लिए स्वतंत्र महसूस करें।

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

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

अधिक पारंपरिक मल्टीथ्रेडिंग System.Thread द्वारा प्रदान की गई .NET लाइब्रेरी (इस मामले में) के भीतर थ्रेडिंग का लाभ लेती है। याद रखें कि धागे पर प्रक्रिया शुरू करने में कुछ ओवरहेड है, इसलिए केवल थ्रेड का उपयोग करें जब ऐसा करने के फायदे इस ओवरहेड से अधिक हो जाएं। आम तौर पर, आप केवल इस प्रकार के सिंगल प्रोसेसर मल्टीथ्रेडिंग का उपयोग करना चाहते हैं जब थ्रेड के नीचे चल रहे कार्य में लंबे अंतराल होंगे जिसमें प्रोसेसर कुछ और कर सकता है। उदाहरण के लिए, हार्ड डिस्क से I/O (और इसके परिणामस्वरूप, एक डेटाबेस सिस्टम से जो एक का उपयोग करता है) मेमोरी एक्सेस की तुलना में तीव्रता के कई आदेश हैं। एक और उदाहरण के रूप में, नेटवर्क का उपयोग भी धीमा हो सकता है। मल्टीथ्रेडिंग इन धीमी (प्रोसेसर की तुलना में) संचालन को पूरा करने के लिए प्रतीक्षा करते समय एक और प्रक्रिया को चलाने की अनुमति दे सकती है।

एक और उदाहरण जब मैंने पारंपरिक मल्टीथ्रेडिंग का उपयोग किया है तो कुछ मूल्यों को कैश करना है जब पहली बार किसी विशेष ASP.NET पृष्ठ को किसी सत्र में एक्सेस किया जाता है। मैं एक थ्रेड को लात मारता हूं ताकि उपयोगकर्ता को पेज के साथ बातचीत करने से पहले कैशिंग को पूरा करने की प्रतीक्षा न करनी पड़े। मैं व्यवहार को भी विनियमित करता हूं जब उपयोगकर्ता दूसरे पृष्ठ का अनुरोध करने से पहले कैशिंग पूर्ण नहीं होता है, ताकि यदि कैशिंग पूर्ण नहीं हो पाती है, तो यह कोई समस्या नहीं है। यह बस कुछ और अनुरोध तेजी से बनाता है जो पहले बहुत धीमी थीं।

मल्टीथ्रेडिंग को आपके आवेदन की रखरखाव के लिए भी लागत पर विचार करें। उदाहरण के लिए, थ्रेडेड अनुप्रयोगों को डीबग करना कठिन हो सकता है।

मुझे उम्मीद है कि यह कम से कम कुछ हद तक आपके प्रश्न का उत्तर देगा।

+0

तो .net के साथ समानांतर प्रोग्रामिंग multithreading encapsulates? क्या यह सही है कि पुष्टि? – RollRoll

+0

@EdwinSnts मुझे पूरी तरह से यकीन नहीं है कि आप क्या पूछ रहे हैं। एकाधिक धागे, चाहे समानांतर लिंक या किसी अन्य तरीके से बनाया गया हो, अलग प्रोसेसर कोर पर चलने को समाप्त कर सकते हैं। क्या आपका आशय यही था? – Andrew

+0

इसका मतलब यह है कि यदि मैं समानांतर linq का उपयोग नहीं करता, तो मेरे कोड के निर्देश केवल एक कोर में निष्पादित किए जाएंगे? भले ही कंप्यूटर होस्टिंग में मल्टीकोर प्रोसेसर हों? – RollRoll

0

एक धागे का उपयोग करने के कारण सीपीयू/कोर के एक नंबर पर बड़े-बड़े, सीपीयू बाध्य कार्यों को विभाजित करने, तेजी से खत्म करने के लिए है। दूसरा एक विस्तारित कार्य को अतुल्यकालिक रूप से निष्पादित करने देना है, इसलिए अग्रभूमि चलने पर उत्तरदायी बना रहता है।

आपके उदाहरण इनमें से दूसरे पर ध्यान केंद्रित कर रहे हैं। हालांकि यह एक अच्छा कारण हो सकता है, यदि आप इसके बजाय एसिंक्रोनस I/O का उपयोग कर सकते हैं, तो आमतौर पर यह बेहतर होता है (उदाहरण के लिए, सॉकेट का उपयोग करके लगभग कुछ भी सॉकेट (एस) को अतुल्यकालिक रूप से उपयोग करके बेहतर कर सकता है)। Asynchronous I/O को रद्द करना आसान है, और इसमें आमतौर पर कम CPU ओवरहेड होगा।

1

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

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

उस स्थिति में, सिस्टम का उपयोग कर। थ्रेडिंग। थ्रेड शायद अधिक हो क्योंकि आपको इतना नियंत्रण की आवश्यकता नहीं है। BackgrounWorker का उपयोग शायद एक बेहतर विकल्प है।

थ्रेडिंग मास्टर के लिए कुछ मुश्किल है, लेकिन जब सही ढंग से उपयोग किया जाता है तो लाभ बहुत अधिक होते हैं, प्रदर्शन सबसे आम है।

0

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

धागे का उपयोग करके आप बहु-कोर/प्रोसेसर मशीनों की शक्ति का बेहतर उपयोग कर सकते हैं।

आपके आवेदन की पृष्ठभूमि में कुछ डेटा की निगरानी।

ऐसे कई परिदृश्य हैं।

1

जोसेफ अल्बहारी यह बहुत अच्छी तरह से here संक्षेप:

  • एक संवेदनशील यूजर इंटरफेस
  • एक अन्यथा अवरुद्ध सीपीयू
  • समानांतर प्रोग्रामिंग
  • सट्टा निष्पादन
  • करने के लिए अनुरोध की अनुमति दे के कुशल उपयोग बनाने को बनाए रखने एक साथ संसाधित किया जाना
+0

@ जेरी कॉफिन - आपका बिंदु अच्छी तरह से लिया गया है। संपादन लागू –

0

मेरी टिप्पणी को साकार एक जवाब के रूप पर्याप्त हो सकता है ...

मैं एक संसाधन के नजरिए से बहु सूत्रण परिदृश्य देख अच्छा लगता है। दूसरे शब्दों में, यूआई (ग्राफिक्स), नेटवर्किंग, डिस्क आईओ, सीपीयू (कोर), रैम इत्यादि। मुझे लगता है कि कम से कम सामान्य अर्थ में बहु-थ्रेडिंग का उपयोग करने का निर्णय लेने में सहायता करता है।

इसके पीछे तर्क यह है कि मैं एक विशिष्ट थ्रेड (उदाहरण के लिए डिस्क आईओ) पर एक संसाधन का लाभ उठा सकता हूं जबकि एक ही समय में एक अलग संसाधन का उपयोग करके किसी और को पूरा करने के लिए एक और थ्रेड का उपयोग कर सकता हूं।

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