5

मुझे एक सेवा मिली है जो विभिन्न सर्वरों के स्कैन चलाती है। प्रश्न में नेटवर्क विशाल हो सकते हैं (हजारों नेटवर्क नोड्स)।टीपीएल कतार का प्रबंधन

सॉफ्टवेयर के वर्तमान संस्करण एक कतार/सूत्रण हमें द्वारा डिजाइन वास्तुकला जो काम करता है, लेकिन जैसा कि कुशल के रूप में यह हो सकता है नहीं है (जिनमें से कम से कम नहीं है क्योंकि नौकरियों बच्चों जो अच्छी तरह से संभाला नहीं है अंडे कर सकते हैं)

उपयोग कर रहा है

वी 2 आ रहा है और मैं टीपीएल का उपयोग करने पर विचार कर रहा हूं। ऐसा लगता है कि यह आदर्श रूप से उपयुक्त होना चाहिए।

मैं this question है, जो करने के लिए इस सवाल का जवाब कार्यों TPL संभाल कर सकते हैं करने के लिए कोई सीमा नहीं है निकलता है देखा है। मेरे सरल परीक्षणों में (100,000 कार्यों को स्पिन करें और उन्हें टीपीएल को दें), टीपीएल ने आउट ऑफ़ मेमोरी अपवाद के साथ काफी जल्दी बार्फ़ किया (काफी उचित - विशेष रूप से मेरे देव बॉक्स पर)।

स्कैन समय की एक चर लंबाई ले लेकिन 5 मिनट/काम के लिए एक अच्छा औसत है।

आप कल्पना कर सकते हैं, बहुत बड़ा नेटवर्क के लिए स्कैन समय के एक काफी लंबाई ले जा सकते हैं, यहां तक ​​कि मांसल सर्वर पर।

मुझे पहले से ही एक ढांचा मिल गया है जो कई स्कैन सर्वरों के बीच स्कैन जॉब्स (डीबी में संग्रहीत) को विभाजित करने की अनुमति देता है, लेकिन सवाल यह है कि मुझे एक विशिष्ट सर्वर पर टीपीएल को वास्तव में कैसे काम करना चाहिए।

मैं TPL की कतार के आकार और पर नजर रखने के कर सकते हैं (जैसे) यह ऊपर ऊपर अगर यह सौ प्रविष्टियों की एक जोड़ी से नीचे गिर जाता? क्या ऐसा करने के लिए कोई नकारात्मक पक्ष है?

मुझे उस स्थिति को संभालने की भी आवश्यकता है जहां स्कैन को रोका जाना चाहिए। यह उन कार्यों को रद्द/रीसेट करके टीपीएल को काम न देकर करना आसान लगता है जो पहले ही आंशिक रूप से संसाधित हो सकते हैं।

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

क्या किसी को इस तरह से टीपीएल का उपयोग करने का कोई अनुभव है? क्या कोई विचार है जिसके बारे में मुझे अवगत होना चाहिए?

+0

हजारों कार्य 'का निर्धारण करना, जहां प्रत्येक में कई मिनट लग सकते हैं, शायद एक अच्छा विचार नहीं है। ऐसे मामले में, टीपीएल नए 'कार्य का ओवर और ओवर शेड्यूल करेगा, जो शायद आपके मामले में एक अच्छा विचार नहीं है। – svick

+0

यह मुझे स्पष्ट नहीं है कि दिया गया स्कैन (लगभग 5 मिनट तक चलने वाला कार्य) अपने अधिकांश समय को आई/ओ में नेटवर्क से वापस आने के लिए इंतजार कर रहा है या अधिकांश समय सीपीयू का विश्लेषण करने में इंतजार कर रहा है। कुछ अन्य ढांचे जो आप देख सकते हैं, यह बेहतर हो सकता है कि यह टीपीएल डेटाफ्लो और प्रतिक्रियाशील एक्सटेंशन 2.0 होगा। यदि आप कुछ कोड दे सकते हैं जो दिखाता है कि दिया गया स्कैन कैसा दिखता है (कम से कम कुछ छद्म कोड के संदर्भ में यह पता लगाने के लिए कि किस प्रकार का आईओ/सीपीयू संतुलन है), जो दूसरों को बेहतर दिशा देने में भी मदद कर सकता है। –

+0

@ जेम्स मैनिंग माफी, मुझे यह स्पष्ट करना चाहिए था ...> 5 मिनट का 99% नेटवर्क IO – Basic

उत्तर

10

TPL काम की छोटी इकाइयों को शुरू करने और उन्हें साथ में चल रहे के बारे में है। यह इस काम की निगरानी, ​​रोकथाम या थ्रॉटलिंग के बारे में है।

आप "काम" शुरू करने के लिए और धागे सिंक्रनाइज़ करने के लिए एक निम्न स्तर के उपकरण के रूप में TPL देखना चाहिए।

मुख्य बिंदु: टीपीएल कार्य! = तार्किक कार्य। तार्किक कार्य आपके मामले में स्कैन-फ़ंक्शन हैं ("x से y से ip-range स्कैन करें")। इस तरह के एक कार्य को भौतिक कार्य "सिस्टम। थ्रेडिंग टास्क" से मेल खाना चाहिए क्योंकि दोनों अलग-अलग अवधारणाएं हैं।

आपको लॉजिकल कार्यों को स्वयं निर्धारित करने, ऑर्केस्ट्रेट करने, निगरानी करने और रोकने की आवश्यकता है क्योंकि टीपीएल उन्हें समझ में नहीं आता है और इसे नहीं बनाया जा सकता है।

अब और अधिक व्यावहारिक चिंताओं: OOM बिना

  1. TPL निश्चित रूप से शुरू कर सकते हैं 100k कार्यों।ओओएम हुआ क्योंकि आपके कार्यों का कोड थका हुआ स्मृति।
  2. स्कैनिंग नेटवर्क एसिंक्रोनस कोड के लिए एक महान मामले की तरह लगता है क्योंकि जब आप स्कैनिंग कर रहे हैं तो आपको समानांतरता की एक बड़ी डिग्री होने पर परिणामों पर प्रतीक्षा करने की संभावना है। आप शायद अपनी प्रक्रिया में 500 थ्रेड नहीं चाहते हैं जो सभी नेटवर्क पैकेट आने के लिए प्रतीक्षा कर रहे हैं। असीमित कार्य टीपीएल के साथ अच्छी तरह से फिट होते हैं क्योंकि आपके द्वारा चलाए जाने वाले प्रत्येक कार्य को पूरी तरह से सीपीयू-बाध्य और छोटा हो जाता है। यह टीपीएल के लिए मीठा स्थान है।
+0

पर इंतजार कर रहा है धन्यवाद - इसलिए संक्षेप में, मैं अपनी मौजूदा लाइब्रेरी को अनुकूलित करूँगा और शेड्यूलिंग आदि रखूंगा ... जिस तरह से यह है लेकिन वास्तविक थ्रेड प्रबंधन को टीपीएल को बंद कर दें। – Basic

+0

@ बासिक, असल में हाँ ;-) यदि कोड एसिंक बनाने के लिए सी # 5 उपलब्ध है तो यह काफी आसान है। यदि आप v5 पर नहीं हैं तो आप "async interator" पैटर्न को वर्कअराउंड (http://blogs.msdn.com/b/pfxteam/archive/2009/06/30/9809774.aspx) के रूप में देख सकते हैं। – usr

+0

धन्यवाद हाँ, मैं लक्ष्यीकरण कर रहा हूं .NET 4.5 पहले से ही - क्यों नहीं एक पुनर्लेख काम में है? इसके अलावा, मुझे वास्तव में एमवीसी में नया 'एपीकंट्रोलर' पसंद है;) – Basic

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