2010-03-03 34 views
5

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

मैं अगर मैं बजाय एक TimeoutScheduler कि आंतरिक रूप से बजाय अनुरोध के अनुसार एक होने का केवल एक टाइमर का प्रयोग करेंगे बनाने चाहिए सोच रहा हूँ।

कोई भी जो सिस्टम के आंतरिक को जानता है। थ्रेडिंग। टिमर मुझे कुछ अंतर्दृष्टि दें यदि टाइमआउट शेड्यूलर एक अच्छा विचार होगा या अगर यह केवल कुछ पहले से ही कुशलतापूर्वक अनुकूलित करने का प्रयास करेगा।

नोट: मेरी परिदृश्य के लिए, टाइमर परिशुद्धता महत्वपूर्ण नहीं है।

(मैं समवर्ती टाइमर का बहुत कुछ के साथ System.Threading.Timer के साथ कुछ प्रदर्शन परीक्षण किया था। यह अच्छी तरह से पैमाने पर करने लग रहा था, लेकिन मुझे यकीन है कि अगर यह एक वास्तविक प्रणाली में अवांछित दबाव डाला जाएगा नहीं कर रहा हूँ)

उत्तर

11

मैं रेमंड चेन से इस पोस्ट को निर्देशित करेंगे:

What is the maximum number of timers a program can create?

तकनीकी तौर पर वहाँ उनमें से हजारों बनाने के साथ कोई समस्या नहीं है। बस ध्यान रखें कि इन वैश्विक प्रणाली संसाधनों का उपयोग किया है, तो आप अंततः एक ऊपरी सीमा मारा और/या (विंडोज खुद सहित) अन्य कार्यक्रमों भूख से मर अगर आप इसके साथ पागल हो शुरू कर देंगे।

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


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

उपरोक्त के अतिरिक्त, आप भी गतिशील रूप से टिक अंतराल आग जब भी अगले अनुरोध टाइम आउट के लिए निर्धारित है समायोजित कर सकते हैं; फिर प्रत्येक टिक पर, अगली टाइमआउट पर अगली टिक को फिर से निर्धारित करें। यह वस्तुतः कोई सिस्टम संसाधन नहीं लेगा (केवल एक टाइमर) और यह भी तेज़ होगा (जैसा कि आपके एक-टाइमर-प्रति-अनुरोध विचार के साथ, आप वास्तव में महंगे कोड चला रहे होंगे जब अनुरोध वास्तव में समाप्त हो जाएंगे)।

भले ही आप टाइमर के हजारों बना सकते हैं, ऊपर दृष्टिकोण कहीं बेहतर स्केल करेगा और यह भी एक बहुत आसान का परीक्षण करने और बनाए रखने के लिए किया जाएगा।

+0

रेमंड चेन का आलेख एक अलग प्रकार के टाइमर का वर्णन करता है। – SLaks

+0

@ स्लक्स: रेमंड चेन का लेख किसी विशिष्ट प्रकार के टाइमर का वर्णन नहीं करता है। वह अंत में विंडोज फॉर्म टाइमर को गुजरने का जिक्र करता है, और मैं आपको आश्वस्त करता हूं कि मैं अंतर के बारे में अच्छी तरह से जानता हूं, लेकिन ** ** ** ** ** ** टाइमर विंडोज टाइमर लपेटते हैं और सभी एक ही चेतावनी के अधीन हैं। – Aaronaught

+1

वास्तव में, रेमंड चेन का आलेख SetTimer द्वारा बनाए गए टाइमर का वर्णन करता है। 'System.Threading.Timer' वास्तव में एक टाइमर कतार टाइमर है (http://msdn.microsoft.com/en-us/library/ms686796(v=VS.85).aspx), जो अनिवार्य रूप से एक टाइमर है और अगली घटना को आग लगने का निर्धारण करने का एक प्रभावी तंत्र। –

1

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

1

सिस्टम। थ्रेडिंग। टिमर इसे थ्रेडपूल पर टाइमरकॉलबैक निष्पादित करता है, जिससे 1000 का निर्माण संभवतः थ्रेडपूल भुखमरी का कारण बनता है।

MSDN System.Threating.Timer

विधि आप टाइमर पर अमल करना चाहते हैं निर्दिष्ट करने के लिए एक TimerCallback प्रतिनिधि का प्रयोग करें। टाइमर प्रतिनिधि निर्दिष्ट होता है जब टाइमर का निर्माण होता है, और बदला नहीं जा सकता है। विधि थ्रेड पर बनाए गए थ्रेड पर निष्पादित नहीं होती है; यह सिस्टम द्वारा आपूर्ति किए गए थ्रेडपूल थ्रेड पर निष्पादित करता है।

सिस्टम.Timers.Timer उसी तरह व्यवहार करता है। एक टाइमआउट शेड्यूलर जाने का रास्ता है।

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