मेरे पास मेरे एल्गोरिदम में एक विधि है जो डेटा के बहुत बड़े सेट पर बहुत तंग पाश चलाती है। मैंने मूल रूप से इसे सिंगल-थ्रेडेड लिखा था जो ठीक था, लेकिन इसमें काफी समय लगा। मैं अब इसे गति देने के लिए बिंदु पर हूं, इसलिए अब मैं काम को समानांतर करने के लिए थ्रेडपूल का उपयोग कर रहा हूं। समस्या यह है कि इससे मेरा सीपीयू उपयोग 95-100% तक पहुंच जाता है, जिसे मैं उम्मीद करता हूं। हालांकि, मेरा प्रदर्शन नाटकीय रूप से बढ़ गया है, लेकिन मुझे लगता है कि अगर मैं सभी संदर्भ स्विचिंग पर कटौती कर सकता हूं तो मैं इसे बेहतर बना सकता हूं। यह मेरे अन्य कार्यक्रमों को थोड़ी देर तक ले जाने का कारण बनता है क्योंकि उन्हें सीपीयू संसाधनों के लिए धागे से लड़ना पड़ता है।तंग लूप में थ्रेडपूल कॉलबैक - 100% सीपीयू
मेरा सवाल यह है कि मैं इसे करने के बारे में कैसे जाना चाहिए? एकमात्र चीज जिसे मैं सोचने में सक्षम हूं, एक समय में चल रहे धागे की संख्या को सीमित करना है, लेकिन यह मेरे एल्गोरिदम धीमा कर सकता है क्योंकि केवल कुछ धागे एक ही समय में चलने में सक्षम होंगे। मैं अपने धागे में नींद नहीं जोड़ना चाहता हूं क्योंकि मुझे जितनी जल्दी हो सके पूरा होने के लिए एल्गोरिदम की आवश्यकता है।
संपादित करें: कई लोगों ने टीपीएल का उपयोग करने का उल्लेख किया है। मुझे लगता है कि यह एक अच्छा विचार है, लेकिन दुर्भाग्य से मैं यह उल्लेख करना भूल गया कि मैं .NET 3.5 का उपयोग कर फंस गया हूं क्योंकि मूल एप्लिकेशन ने अभी तक .NET 4 का उपयोग करके एक संस्करण जारी नहीं किया है।
यदि आप गति चाहते हैं, तो आप सभी तेज चीजें क्यों निकाल लेंगे? संदर्भ स्विच ओएस द्वारा किया जाता है, आप इसके साथ गड़बड़ नहीं करते हैं ... – gbianchi
समाधान पूल में धागे की प्राथमिकता को कम करना है। यह कोई जवाब नहीं है क्योंकि मुझे नहीं पता कि इसे कुशलता से कैसे किया जाए :( –
लगता है जैसे आपको व्यक्तिगत कार्यों को बड़ा बनाना चाहिए। ओटीओएच, थ्रेडपूल आपके द्वारा सुझाए गए अधिकांश कार्यों को पहले से ही करने के लिए पर्याप्त स्मार्ट है। यदि आपके पास और कार्य हैं सीपीयू की तुलना में, यह अधिक धागे शुरू करने के बजाय उन्हें कतारबद्ध करेगा। –