मेरे पास बहु-थ्रेडिंग की मूलभूत सीएस-प्रमुख समझ है लेकिन किसी एप्लिकेशन में सरल टाइमर से परे कुछ भी नहीं करना पड़ा है। क्या किसी को एक अच्छे संसाधन के बारे में पता है जो मुझे एक दौरे देगा कि बहु-थ्रेडेड अनुप्रयोगों के साथ कैसे काम करना है, मूल बातें समझाएं और शायद कुछ और कठिन चीजें प्रस्तुत करें?मैं सिद्धांत में थ्रेडिंग समझता हूं लेकिन अभ्यास में नहीं .net
उत्तर
यह जोसेफ अल्बाहारी द्वारा एक महान मुक्त संसाधन है।
- BackgroundWorker नियंत्रण
- WaitHandles
- कॉलबैक कार्यों
- मतदान एक ASyncResult वस्तु
आम तौर पर आप चाहते हैं: Threading in C#
वहाँ नेट में धागे सिंक्रनाइज़ करने के लिए 4 बुनियादी तरीके हैं उस सूची के शीर्ष पर शुरू करने और काम करने के लिए। इसका मतलब है कि पहले देखो और देखें कि क्या बैकग्राउंडर नियंत्रण स्थिति के लिए उपयुक्त है या नहीं। हालांकि, यह बहुत अधिक खिड़कियों के रूपों को मानता है और आप केवल एक नया धागा पैदा कर रहे हैं।
तो अगली कोशिश करें waithandles। Waithandles एक साथ कई धागे समन्वय के लिए अच्छे हैं। आप उन्हें सभी को लात मार सकते हैं और उन सभी के लिए इंतजार कर सकते हैं, या यदि आप एक निश्चित संख्या को सक्रिय रखना चाहते हैं तो आप केवल एक के लिए प्रतीक्षा करते रहें और इसे समाप्त होने पर अगली बार झुकाएं। या शायद आप जानते हैं कि एक धागा बहुत जल्द खत्म हो जाएगा, तो आप इसे खत्म करने के लिए इंतजार कर सकते हैं, थोड़ा सा काम कर सकते हैं, और फिर बाकी के खत्म होने की प्रतीक्षा कर सकते हैं।
वाईथैंडल्स थोड़ा अधिक प्रतीत हो सकता है, कहें, आप केवल एक अतिरिक्त धागे को जन्म दे रहे हैं और आप इसे समाप्त होने तक अवरुद्ध नहीं करना चाहते हैं। फिर आप कॉलबैक का उपयोग कर सकते हैं, ताकि आपके द्वारा निर्दिष्ट फ़ंक्शन को थ्रेड पूर्ण होने के तुरंत बाद बुलाया जाएगा।
अंत में, अगर और केवल अगर किसी कारण से उपरोक्त में से कोई भी काम नहीं करेगा तो आप मतदान पर वापस आ सकते हैं। सामान्य रूप से (BackgoundWorker सहित) WinForms घटना के परिणाम के रूप में,
- ओएस बनाया:
मैं 5 अलग अलग तरीकों से एक नया धागा क्रम में भी मोटे तौर पर, नेट में प्राप्त करने के लिए के बारे में सोच सकते हैं।
- Obj.Begin ___()/End ____()। कुछ सीएलआर कक्षाओं में आपके लिए पहले से ही इन असीमित तरीकों को परिभाषित किया गया है, और जाहिर है कि आप उपलब्ध होने पर उनका उपयोग करना चाहते हैं।
- ThreadPool.QueueUserWorkItem()। अपने स्वयं के धागे बनाने के लिए इस समय का अधिकतर उपयोग करें।
- प्रतिनिधि। बेजिन इनवोक()/एंडइनवोक()। आप इस तरह से किसी भी विधि लपेट सकते हैं।
- थ्रेड। स्टार्ट()। आप इसे इस तरह से कर सकते हैं, लेकिन मैंने हाल ही में कुछ पढ़ा है (अब लिंक नहीं है) कि यदि QueueUserWorkItem प्रतिनिधि विधि काम नहीं करेगा तो शायद बेहतर होगा।
दो महान लेख:
What Every Dev Must Know About Multithreaded Apps
Understand the Impact of Low-Lock Techniques in Multithreaded Apps
भले ही यह लेख नहीं है आप विशेष रूप से के लिए वास्तव में क्या देख रहे हैं, यह उम्मीद है कि आम तौर पर सहायता के लिए किया जाएगा (यानी यह संबंधित है, और एक बहुत अच्छा पढ़ा है):
The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software
एक अच्छा वेब संसाधन .NET में बहु सूत्रण के बारे में जानने के लिए:
- HTML version। http://www.albahari.com/threading/
मैं सभी एक .net डेवलपर के एक महान सिंहावलोकन है:
- Printable version
- Further resources - (including examples)
सबसे अच्छा संसाधन मैं इस विषय पर पता में से एक पुस्तक 'सी # में सूत्रण "है बहु थ्रेडेड अनुप्रयोगों को प्रोग्राम करने के लिए समझने की आवश्यकता है।
- 1. क्या मैं जॉइन को गलत समझता हूं?
- 2. मेनेसिया: wait_for_tables/2, क्या मैं वास्तव में इसे समझता हूं?
- 3. .NET थ्रेडिंग
- 4. बिलाव समझता AMQ: दलाल लेकिन ग्रहण स्कीमा
- 5. अभ्यास में सत्र अपहरण
- 6. क्या मैं अजाक्स को सही ढंग से समझता हूं?
- 7. जीडब्ल्यूटी (क्लाइंट) में थ्रेडिंग
- 8. थ्रेडिंग, CultureInfo .net, TPL, PLINQ
- 9. सर्वश्रेष्ठ थ्रेडिंग कतार उदाहरण/सर्वोत्तम अभ्यास
- 10. सिद्धांत - में
- 11. क्या मैं समझता हूं कि यूनिक्स फ़ाइल वर्णनकर्ता सी में कैसे काम करते हैं?
- 12. क्या मैं ओएसवॉक सही समझता हूँ?
- 13. .NET डीबगिंग - सिस्टम। थ्रेडिंग। एक्सेक्यूशन कॉन्टेक्स्ट.रुन ट्रीकोड
- 14. सी # .NET 2 थ्रेडिंग। टिमर - समय बहती
- 15. पाइथन में मल्टीप्रोसेस या थ्रेडिंग?
- 16. पायथन थ्रेडिंग: क्या मैं दो थ्रेडिंग पर सो सकता हूं। इवेंट() एक साथ?
- 17. सी # में थ्रेडिंग का उचित उपयोग?
- 18. मल्टी-थ्रेडिंग - प्रोग्राम अंत में क्लीनअप रणनीति
- 19. .NET 4.0 में .NET 2.0 नहीं है?
- 20. मॉडलिंग "मैं एक * हूं लेकिन मैं भी ** **
- 21. एक अनुप्रयोग सर्वर में थ्रेडिंग
- 22. सीडीएन में कैश लेकिन ब्राउजर में नहीं
- 23. मैं डॉटसीएमएस जैसे सीएमएस की तलाश में हूं लेकिन PHP
- 24. मैं .NET में WMI प्रदर्शन को कैसे सुधार सकता हूं?
- 25. जावा में डिजाइन पैटर्न अभ्यास
- 26. थ्रेडिंग
- 27. मल्टी थ्रेडिंग
- 28. सिद्धांत लाने में
- 29. मैं .NET में नकारात्मक प्रतीक कैसे प्रदर्शित कर सकता हूं?
- 30. क्या मैं .NET में "System.Currency" का उपयोग कर सकता हूं?