2012-10-18 2 views
5

हम एक पीपीएल Concurrency :: TaskScheduler का उपयोग हमारी मीडिया पाइपलाइन से सब्सक्राइब किए गए ग्राहकों (आमतौर पर एक जीयूआई ऐप) से ईवेंट भेजने के लिए करते हैं।माइक्रोसॉफ्ट पीपीएल हल्के कार्य शेड्यूलर के साथ बैक-ऑफ कैसे कार्यान्वित करें?

ये घटनाएं सी ++ लैम्बडा पर पास की गई हैं Concurrency :: टास्कशेड्यूलर :: शेड्यूलस्क()

लेकिन, लोड के अंतर्गत, पाइप लाइन ग्राहक की तुलना में अधिक दर पर घटनाओं उत्पन्न उन्हें उपभोग कर सकते हैं कर सकते हैं।

क्या कोई पीपीएल रणनीति है जिसका उपयोग मैं ईवेंट प्रेषक को पर किसी ईवेंट (वास्तव में, एक निर्धारित कार्य) कतार में करने के लिए उपयोग कर सकता हूं यदि निर्धारित कार्यों की 'कतार' एन से अधिक है? और यदि नहीं, तो मैं अपना खुद का रोल कैसे करूं?

उत्तर

1

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

मेरी शर्त यह है कि आपको पहले से ही शेड्यूलर में कितने कार्य हैं, और शेड्यूलर से पहले आकार सीमित कतार है, जो आने वाले कार्यों के प्रवाह को कम करने में आपकी सहायता करने के लिए आपको उस तंत्र को स्वयं लागू करना होगा।

मुझे लगता है कि आप अपने लैम्ब्स के लिए एक साधारण std :: queue का उपयोग कर सकते हैं, और हर बार जब आप एक नया ईवेंट प्राप्त करते हैं, तो आप जांचते हैं कि कितने कार्य चल रहे हैं, और अपनी अधिकतम तक पहुंचने के लिए कतार से जितना संभव हो उतना जोड़ें चल रहा कार्य गिनती। यदि कतार अभी भी उसके बाद पूर्ण है, तो आप नए कार्य को मना कर देते हैं।

चल रहे कार्यों के लेखांकन को संभालने के लिए, आप अपने कार्यों को पूरा करने के समय काउंटर को कम करने वाले कार्यों के साथ लपेट सकते हैं (दौड़ से बचने के लिए एक म्यूटेक्स का उपयोग करें), और नए कार्य को शेड्यूल करते समय काउंटर को बढ़ाएं।

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