मेरे पास डेटा है जो किसी निश्चित पृष्ठभूमि थ्रेड पर निष्पादित करने की आवश्यकता है। मेरे पास अन्य सभी धागे से कोड आ रहा है जिसे इसमें कॉल करने की आवश्यकता है। तुल्यकालन इस सूत्रण आवश्यकतासर्वश्रेष्ठ थ्रेडिंग कतार उदाहरण/सर्वोत्तम अभ्यास
उत्तर
आप कर सकते थे या तो:
- लागू एक producer/consumer model (जो थ्रेड-सुरक्षित उपयोग नहीं generic queue)
- या अपनी पृष्ठभूमि में उपयोग थ्रेड एक synchronized queue है, जो एक संग्रह के माध्यम से गणना कर रहा है की प्रक्रिया पर टिप्पणी नहीं करता है।
यह ThreadPools पर एक दिलचस्प लेख है समर्थन करने के लिए करता है किसी को भी एक अच्छा ट्यूटोरियल या एक कतार होने पर सबसे अच्छा अभ्यास है:
सरल उपयोग के मामलों के लिए आप नेट की अपनी थ्रेडपूल क्लास का भी उपयोग कर सकता है।
इस समस्या के मेरे पसंदीदा समाधानों में से एक producer/consumer
पैटर्न के समान है।
मैं एक मास्टर थ्रेड (काफी मेरा प्रोग्राम Main()
) बनाता है जिसमें अवरुद्ध कतार वस्तु होती है।
यह मास्टर थ्रेड कई कार्यकर्ता धागे को स्पिन करता है जो केंद्रीय अवरुद्ध धागे से साधारण पॉप चीजें और उन्हें संसाधित करते हैं। चूंकि यह थ्रेडसेफ अवरुद्ध कतार है, सिंक्रनाइज़ेशन बिट्स आसान हैं - TaskQueue.Dequeue()
कॉल तब तक अवरुद्ध हो जाएगा जब तक कोई निर्माता निर्माता/मुख्य थ्रेड द्वारा कार्य नहीं किया जाता है।
आप कॉन्फ़िगरेशन चर के अनुसार इच्छित कर्मचारियों की संख्या को गतिशील रूप से प्रबंधित कर सकते हैं या इसे ठीक कर सकते हैं - क्योंकि वे सभी कतार से चीजों को पॉप अप कर रहे हैं, श्रमिकों की संख्या में कोई जटिलता नहीं है।
मेरे मामले में, मेरे पास एक सेवा है जो विभिन्न प्रकार के tasks
को संसाधित करती है। मेरे पास TaskQueueTask
जैसी सामान्य जेनेरिक को संभालने के लिए टाइप की गई कतार है। फिर मैं उस सबस्क्रास को Execute()
विधि को ओवरराइड करता हूं।
मैंने .NET थ्रेडपूल दृष्टिकोण भी आजमाया है जहां आप चीजों को पूल में आसानी से फेंक सकते हैं। यह उपयोग करना बेहद आसान था, लेकिन थोड़ा नियंत्रण भी प्रदान किया गया था, और निष्पादन आदेश, समय इत्यादि की कोई गारंटी नहीं थी। यह केवल हल्के वजन कार्यों के लिए अनुशंसित है।
यहाँ एक अवरुद्ध कतार है: http://www.eggheadcafe.com/articles/20060414.asp [पहली कड़ी] (http में –
जोसेफ अल्बाहारी द्वारा Threading in C# देखें, मल्टीथ्रेडिंग के बारे में बहुत पूर्ण संदर्भ। विशेष रूप से, वह producer/consumer queues को शामिल करता है।
अल्बाहारी के लिए आपका थ्रेडिंग लिंक एक बहुत ही महान संसाधन है। – CaptainBli
आप इस समाधान का प्रयास कर सकते हैं। यह आपको उत्पादक-उपभोक्ता पैटर्न को कार्यान्वित करने का तरीका दिखाता है। इसके बारे में कुछ स्पष्टीकरण भी है कि इसके साथ क्या किया जा सकता है। उत्पादकों और उपभोक्ताओं की संख्या के विभिन्न संयोजनों की तरह।
दोनों लिंक अब अमान्य हैं। – Lichader
- 1. सर्वश्रेष्ठ अभ्यास?
- 2. सर्वश्रेष्ठ अभ्यास
- 3. सर्वश्रेष्ठ अभ्यास
- 4. सर्वश्रेष्ठ अभ्यास
- 5. डेटा लेयर सर्वश्रेष्ठ अभ्यास
- 6. सर्वश्रेष्ठ अभ्यास डेटाबेस
- 7. सर्वश्रेष्ठ अभ्यास यूआई गाइड?
- 8. एचटीएमएल लेआउट सर्वश्रेष्ठ अभ्यास
- 9. सर्वश्रेष्ठ अभ्यास यूआई
- 10. सर्वश्रेष्ठ अभ्यास ASP.NET
- 11. ऑटोपॉडेट्स के लिए सर्वश्रेष्ठ अभ्यास
- 12. सर्वश्रेष्ठ अभ्यास? आईफोन: सिंक डेटा
- 13. एएसपी.नेट एमवीसी कुकीज़ सर्वश्रेष्ठ अभ्यास
- 14. Django Celery लॉगिंग सर्वश्रेष्ठ अभ्यास
- 15. NSUserDefaults के लिए सर्वश्रेष्ठ अभ्यास
- 16. सर्वश्रेष्ठ अभ्यास: जेपीए के लिए सर्वश्रेष्ठ डेटाबेस नामकरण सम्मेलन?
- 17. सर्वश्रेष्ठ अभ्यास और परीक्षण योग्य नियंत्रकों
- 18. जावास्क्रिप्ट सर्वश्रेष्ठ अभ्यास - स्क्रिप्ट/कोड पुन: उपयोग
- 19. उपयोगिता वर्ग के लिए सर्वश्रेष्ठ अभ्यास?
- 20. शेयरपॉइंट कस्टम जेएस फ़ाइल सर्वश्रेष्ठ अभ्यास
- 21. सर्वश्रेष्ठ अभ्यास लागू करते समय copyWithZone:
- 22. सर्वश्रेष्ठ अभ्यास: ओवरराइड OnDispose (निपटाने bool) घटक
- 23. सर्वश्रेष्ठ अभ्यास: केवल पढ़ने के लिए आईसीओलेक्शन
- 24. सर्वश्रेष्ठ अभ्यास/आवश्यक जावा गुण सामग्री फ़ाइल
- 25. सर्वश्रेष्ठ अभ्यास जब एक स्क्रम संचार उपकरण
- 26. सर्वश्रेष्ठ अभ्यास/monotouch कार्यक्रम संबंधी यूआई लेआउट
- 27. सर्वश्रेष्ठ अभ्यास: वैध क्रॉस-साइट स्क्रिप्टिंग
- 28. सर्वश्रेष्ठ अभ्यास: जावा स्थैतिक गैर अंतिम चर
- 29. बड़ी डब्ल्यूसीएफ सेवा के लिए सर्वश्रेष्ठ अभ्यास?
- 30. सर्वश्रेष्ठ अभ्यास: पकड़ने java.net.URL में विफलता अंक
कोड नमूना: // MSDN। microsoft.com/en-us/library/yy12yx1f।एएसपीएक्स) की अनुशंसा नहीं की जाती है क्योंकि इसकी संभावित दौड़ स्थिति होती है जिसके परिणामस्वरूप खोए गए सिग्नल होते हैं। इसका इस्तेमाल न करें! –