2009-10-16 6 views
5

मेरे पास कुछ सीपीयू समय उपलब्ध होने पर कई कम-इंप्रेशन कार्य किए जाने हैं। मैं यह काम नहीं करना चाहता हूं अगर अन्य आयात कार्य चल रहे हों। यदि कोई सामान्य/उच्च प्राथमिकता कार्य आता है तो मैं महत्व को पूरा करने तक कम महत्व वाले कार्य को रोकना चाहता हूं।सी # थ्रेड पूल में कम थ्रेड प्राथमिकता

प्रदर्शन करने के लिए बहुत कम महत्वपूर्ण कार्य (50 से 1000) है। इसलिए मैं प्रति कार्य एक धागा बनाना नहीं चाहता हूं। हालांकि मुझे विश्वास है कि थ्रेडपूल कुछ प्राथमिकता विनिर्देशों की अनुमति नहीं देता है, है ना?

आप इसे कैसे हल करेंगे?

उत्तर

2

आप थ्रेड को नया बना सकते हैं और various priorities ले जाने के लिए Dispatcher का उपयोग कर सकते हैं।

प्राथमिकताएं थोड़ा यूआई केंद्रित हैं लेकिन इससे कोई फर्क नहीं पड़ता।

2

आपको नियमितThreadPool की प्राथमिकता से गड़बड़ नहीं करना चाहिए, क्योंकि आप एकमात्र उपभोक्ता नहीं हैं। मुझे लगता है कि तार्किक दृष्टिकोण उपभोक्ता (ओं) के रूप में अपने स्वयं के Thread (ओं) का उपयोग करके निर्माता/उपभोक्ता कतार के रूप में सरल रूप से लिखना होगा - थ्रेड प्राथमिकता को स्वयं सेट करना।

.NET 4.0 में यह सब आसान बनाने के लिए नई लाइब्रेरी (टीपीएल आदि) शामिल है - तब तक आपको कस्टम थ्रेड पूल या वर्क कतार बनाने के लिए अतिरिक्त कोड की आवश्यकता होती है।

+0

चाल यह है कि मैं अपनी प्राथमिकताओं को दिए गए कार्यों को शुरू नहीं करना चाहता, मैं चाहता हूं कि उन्हें उनकी प्राथमिकता दी जाए। (यह कहना है कि यदि कोई उच्च प्राथमिकता एक रन चलाती है तो कम प्राथमिकता वाले कार्य को रोकना चाहिए) – Toto

+0

एनबी: मैं 3.5 फ्रेमवर्क – Toto

+0

का उपयोग कर रहा हूं, फिर आपको "प्राथमिकता कतार सी #" की तलाश करनी होगी - बहुत सारे हैं, लेकिन मैं ' टी सीधे किसी विशेष सिफारिश की सिफारिश नहीं है। मुझे * संदेह है * जारी होने पर टीपीएल इसे सीधे पेश करेगा। –

2

जब आप थ्रेडपूल में निर्माण का उपयोग कर रहे हैं तो सभी थ्रेड डिफ़ॉल्ट प्राथमिकता के साथ निष्पादित होते हैं। यदि आप इस सेटिंग के साथ गड़बड़ करते हैं तो इसे अनदेखा कर दिया जाएगा। यह एक ऐसा मामला है जहां आपको अपना खुद का थ्रेडपूल रोल करना चाहिए। कुछ साल पहले मैंने अपनी जरूरतों को पूरा करने के लिए SmartThreadPool बढ़ाया। यह आपके भी संतुष्ट हो सकता है।

0

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