मैंने बड़ी संख्या में कार्य उदाहरण बनाए हैं। मुझे उन सभी को चलाने की ज़रूरत है, और उन सभी को पूरा करने की प्रतीक्षा करें। समस्या यह है कि मुझे यह सुनिश्चित करने की ज़रूरत है कि किसी भी समय X से अधिक कार्य "प्रारंभ" और "पूर्ण" के बीच नहीं हैं; कार्यों में अन्य पार्टियों को कॉल शामिल है जिनके पास एक साथ कॉल की संख्या पर प्रतिबंध है। चूंकि ये प्रतिबंध मेरे हार्डवेयर पर आधारित नहीं हैं, इसलिए मैं बुद्धिमान थ्रॉटलिंग में निर्मित किसी भी पर भरोसा नहीं कर सकता; मुझे सीमा को सख्ती से लागू करने की आवश्यकता है। मैं कार्यों को बढ़ाने और थ्रेड-सुरक्षित तरीके से साझा चर को कम करके ऐसा करने में सक्षम हूं, लेकिन यह अनावश्यक रूप से बोझिल लगता है। क्या ऐसा कोई तरीका है जो सीधे एपीआई में अंतर्निहित है, या एक आसान सिंक्रनाइज़ेशन टूल मैं याद कर रहा हूं?कई .NET कार्य उदाहरणों को थ्रॉटल करने का सबसे अच्छा तरीका क्या है?
उत्तर
आप अपनी खुद की कार्य अनुसूचक बनाने के लिए, को देखने के How to: Create a Task Scheduler That Limits the Degree of Concurrency
संपादित करें: यह सेमाफोर के साथ की तुलना में अधिक कोड की आवश्यकता है, लेकिन मैं एक लग रहा है कि यह बेहतर प्रदर्शन कर सकती है, क्योंकि, जिसमें थ्रेड पूल कार्य क्रियान्वित कर रहे हैं आपके सेमफोर से अनजान है, लेकिन टास्कशेड्यूलर का उपयोग करके उनके नियमों से खेल रहा है।
संपादित करें 2: सेमाफोर का उपयोग कर के संभावित दोष यह है कि थ्रेड पूल सोच सकते हैं कि अपने कार्य को आईओ संचालन कर रही है और उन्हें एक बार में एक बहुत का निर्धारण करें (ताकि वे वहाँ लटका और इंतजार, क्योंकि वे डॉन ' टी सीपीयू की जरूरत है)। टास्कशेड्यूलर का उपयोग करके उन्हें ठीक उसी समय निर्धारित किया जाएगा जब उनके लिए जगह हो। यह निश्चित रूप से पूल क्लीनर रखेगा।
सेमाफोर वर्ग आप के लिए काम कर सकते हैं: http://msdn.microsoft.com/en-us/library/system.threading.semaphore.aspx
वहाँ बताएंगे कि कैसे इसका इस्तेमाल करने के लिए इस MSDN पृष्ठ पर एक अच्छा उदाहरण है।
हल्का वजन भी निर्मित थ्रेड पूलिंग/सिंक्रनाइज़ेशन तंत्र हो सकता है जिसका उपयोग आप एक ही अंत को पूरा करने के लिए कर सकते हैं, लेकिन सेमफोर मूल रूप से जो भी आप पूछ रहे हैं उसे करने के लिए डिज़ाइन किया गया है।
यदि .NET 4.0 और सेमफोर के बारे में बात करते हैं तो मैं सेमाफोरस्लिम को देखने की अनुशंसा करता हूं: http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx – Andrey
- 1. एकाधिक कॉन्फ़िगरेशन फ़ाइल उदाहरणों को संभालने का सबसे अच्छा तरीका?
- 2. सबसे अच्छा तरीका है, .NET
- 3. जावास्क्रिप्ट को शामिल करने का सबसे अच्छा तरीका क्या है?
- 4. सी #/.net से प्रिंट करने का सबसे अच्छा तरीका?
- 5. "टाइमर" को लागू करने का सबसे अच्छा तरीका क्या है?
- 6. तारों को पार्स करने का सबसे अच्छा तरीका क्या है?
- 7. एनएसएमयूटेबलएरे को शफल करने का सबसे अच्छा तरीका क्या है?
- 8. तालिका को समर्पित करने का सबसे अच्छा तरीका क्या है?
- 9. जावा एप्लिकेशन को कई निर्भरताओं के साथ पैकेज करने का सबसे अच्छा तरीका क्या है?
- 10. एसिंक्रोनस कार्य सिंक्रनाइज़ करने का सबसे अच्छा तरीका
- 11. .NET में निर्भरता पेड़ को प्रबंधित करने का सबसे अच्छा तरीका क्या है?
- 12. एकाधिक सबव्यूज़ व्यवस्थित करने का सबसे अच्छा तरीका क्या है?
- 13. कई फ़ाइलों में खोजने/प्रतिस्थापित करने का सबसे अच्छा तरीका?
- 14. गणित अभिव्यक्ति निष्पादित करने का सबसे अच्छा तरीका क्या है?
- 15. .NET विंडो अनुप्रयोगों में अप्रत्याशित त्रुटियों को एकत्र/रिपोर्ट करने का सबसे अच्छा तरीका क्या है?
- 16. चेरीपी: क्या परियोजना को कई फाइलों में विभाजित करने का सबसे अच्छा तरीका है?
- 17. जावा में कई जटिल कमांड लाइन तर्कों को पार्स करने का सबसे अच्छा तरीका क्या है?
- 18. एक वेबएपी विधि से कई बाइनरी फ़ाइलों को प्रस्तुत करने का सबसे अच्छा तरीका क्या है?
- 19. RedirectToAction का परीक्षण करने का सबसे अच्छा तरीका क्या है?
- 20. कई आने वाले पैकेट को संभालने का सबसे अच्छा तरीका
- 21. रुझान डेटा संग्रहीत करने का सबसे अच्छा तरीका क्या है?
- 22. डॉटनेट/.NET में कस्टम विशेषताओं को लागू करने का सबसे अच्छा तरीका क्या है?
- 23. .NET DLL में कनेक्शन स्ट्रिंग को स्टोर करने का सबसे अच्छा तरीका क्या है?
- 24. .NET में छोटे तारों को एन्क्रिप्ट करने का सबसे अच्छा तरीका क्या है?
- 25. आज .NET में एक विश्वसनीय वास्तुकला को लागू करने का सबसे अच्छा तरीका क्या है?
- 26. एक्सएमएल बूलियन विशेषता (.NET में) को पार्स करने का सबसे अच्छा तरीका क्या है?
- 27. .NET अनुप्रयोग के लिए उपयोगकर्ता सेटिंग्स को स्टोर करने का सबसे अच्छा तरीका क्या है?
- 28. जावास्क्रिप्ट में .NET/Razor से स्थानीयकृत संख्याओं को पार्स करने का सबसे अच्छा तरीका क्या है?
- 29. सी #/.NET में पथ और फ़ाइल नाम को गठबंधन करने का सबसे अच्छा तरीका क्या है?
- 30. एक कैसंद्रा क्लस्टर को कम करने का सबसे अच्छा तरीका
एक सेमफोर मेरे लिए एक अच्छा समाधान की तरह लगता है। –