मेरी सिफारिश प्रति मशीन थ्रेड की संख्या निर्दिष्ट करने के लिए कॉन्फ़िगरेशन और कमांड लाइन स्विच प्रदान करना है। Runtime.getRuntime() पर उपलब्ध एक ह्युरिस्टिक का उपयोग करें। उपलब्ध प्रोसेसर() जैसा कि अन्य उत्तरों द्वारा इंगित किया गया है, ऐसे मामलों में जहां उपयोगकर्ता/व्यवस्थापक ने स्पष्ट रूप से एप्लिकेशन को अलग-अलग कॉन्फ़िगर नहीं किया है। मैं दृढ़ता से खिलाफ सलाह देते हैं अनन्य अनुमानी आधारित धागा करने वाली कोर अनुमान लगा, कई कारणों से: इस तरह के इंटेल के रूप में श्रीमती मॉडल:
अधिकांश आधुनिक हार्डवेयर 'हार्डवेयर धागे' का तेजी से अस्पष्ट प्रकार ओर बढ़ रहा है हाइपरथ्रेडिंग और एएमडी के कंप्यूट मॉड्यूल सूत्रों को जटिल करते हैं (नीचे विवरण), और रनटाइम पर इस जानकारी को पूछना मुश्किल हो सकता है।
अधिकांश आधुनिक हार्डवेयर में टर्बो सुविधा होती है जो सक्रिय कोर और परिवेश तापमान के आधार पर गति को मापती है। जैसे-जैसे टर्बो तकनीक में सुधार होता है, गति की गति (ghz) बढ़ जाती है। कुछ हालिया इंटेल और एएमडी चिप्स 2.6ghz (सभी कोर सक्रिय) से 3.6ghz (एकल/दोहरी कोर सक्रिय) तक हो सकते हैं, जो एसएमटी के साथ संयुक्त हो सकता है, प्रत्येक थ्रेड का मतलब पूर्व डिजाइन में 1.6ghz - 2.0ghz throughput प्रभावी हो सकता है। रनटाइम पर इस जानकारी को क्वेरी करने का कोई तरीका नहीं है।
यदि आपके पास मजबूत गारंटी नहीं है कि आपका आवेदन लक्ष्य प्रणाली पर चलने वाली एकमात्र प्रक्रिया होगी, तो सभी सीपीयू संसाधनों को अंधाधुंध रूप से उपभोग करने से उपयोगकर्ता या सर्वर व्यवस्थापक को खुश नहीं किया जा सकता है (यदि सॉफ्टवेयर उपयोगकर्ता है ऐप या सर्वर ऐप)।
को पता है कि रन-टाइम में मशीन के बाकी के भीतर हो रहा है अपने ही घर-रोल्ड मल्टीटास्किंग गिरी के साथ पूरे ऑपरेटिंग सिस्टम की जगह के बिना, कोई मजबूत तरीका नहीं है। आपका सॉफ़्टवेयर प्रोसेस पूछताछ करके और सीपीयू लोड पर देखकर शिक्षित अनुमान लगाने की कोशिश कर सकता है, लेकिन ऐसा करने से जटिल और उपयोगीता विशिष्ट प्रकार के अनुप्रयोगों तक सीमित है (जिसमें से आप अर्हता प्राप्त कर सकते हैं), और आम तौर पर लाभ या विशेषाधिकार प्राप्त करने की आवश्यकता होती है पहुंच स्तर।
आधुनिक वायरस स्कैनर आधुनिक ऑपरेटिंग सिस्टम द्वारा प्रदान किए गए विशेष प्राथमिकता ध्वज को सेट करके आजकल काम करते हैं। उन्होंने ओएस को बताया कि "सिस्टम निष्क्रिय है"। ओएस केवल सीपीयू लोड से अधिक पर अपना निर्णय रखता है: यह उपयोगकर्ता इनपुट और मल्टीमीडिया झंडे को भी मानता है जो मूवी प्लेयर आदि द्वारा निर्धारित किए जा सकते हैं।यह ज्यादातर निष्क्रिय कार्यों के लिए ठीक है, लेकिन आपके जैसे सीपीयू गहन कार्य के लिए उपयोगी नहीं है।
वितरित घर कंप्यूटिंग ऐप्स (BOINC, Folding @ Home, आदि) चल रही प्रक्रियाओं और सिस्टम CPU लोड समय-समय पर क्वेरी करके काम करते हैं - एक बार हर सेकेंड या आधे सेकेंड में। यदि पंक्तियों में कई प्रश्नों के लिए ऐप से संबंधित प्रक्रियाओं पर लोड नहीं पता है तो ऐप गणना को निलंबित कर देगा। एक बार जब लोड कुछ प्रश्नों के लिए कम हो जाता है, तो यह फिर से शुरू होता है। एकाधिक प्रश्नों की आवश्यकता है क्योंकि सीपीयू लोड रीडआउट संक्षिप्त स्पाइक्स के लिए कुख्यात हैं। अभी भी चेतावनी हैं: 1. उपयोगकर्ताओं को अभी भी BOINC को मैन्युअल रूप से पुन: कॉन्फ़िगर करने के लिए प्रोत्साहित किया जाता है ताकि वे अपनी मशीन की चश्मा फिट कर सकें। 2. यदि BOINC व्यवस्थापक विशेषाधिकारों के बिना चलाया जाता है तो यह अन्य उपयोगकर्ताओं (कुछ सेवा प्रक्रियाओं सहित) द्वारा शुरू की गई प्रक्रियाओं से अवगत नहीं होगा, इसलिए यह CPU संसाधनों के लिए उन लोगों के साथ अनुचित रूप से प्रतिस्पर्धा कर सकता है।
के बारे में श्रीमती (हाइपरथ्रेडिंग, कंप्यूट मॉड्यूल):
अधिकांश SMTS या हार्डवेयर कोर के रूप में रिपोर्ट करेंगे इन दिनों, जो आमतौर पर अच्छा नहीं है क्योंकि कुछ अनुप्रयोगों बेहतर प्रदर्शन करते हैं पर हर कोर भर में बढ़ाया धागे एक एसएमटी प्रणाली। मामलों को और भी खराब बनाने के लिए, यह पूछना कि क्या कोर साझा किया गया है (एसएमटी) या समर्पित अक्सर अपेक्षित परिणाम प्राप्त करने में विफल रहता है। कुछ मामलों में ओएस स्वयं को नहीं जानता (विंडोज 7 एएमडी बुलडोजर के साझा कोर डिज़ाइन से अनजान है, उदाहरण के लिए)। यदि आप एक विश्वसनीय एसएमटी गिनती प्राप्त कर सकते हैं, तो अंगूठे का नियम प्रत्येक एसएमटी को सीपीयू-गहन कार्यों के लिए आधे-थ्रेड के रूप में गिनना है, और अधिकतर निष्क्रिय कार्यों के लिए पूर्ण धागा के रूप में। लेकिन हकीकत में, एसएमटी का वजन इस बात पर निर्भर करता है कि किस तरह की गणना, और लक्ष्य वास्तुकला। इंटेल और एएमडी के एसएमटी कार्यान्वयन एक-दूसरे के विपरीत व्यवहार करते हैं, उदाहरण के लिए - इंटेल और पूर्णांतर में शाखाओं के साथ लोड किए गए कार्यों को चलाने में इंटेल मजबूत है। एएमडी समानांतर में सिमड और मेमोरी ऑप्स चलाने में मजबूत है।
के बारे में टर्बो विशेषताएं:
अधिकांश सीपीयू इन दिनों बहुत प्रभावी निर्मित टर्बो समर्थन आगे कम है कि है मूल्य प्राप्त की प्रणाली के सभी कोर भर में स्केलिंग से। इससे भी बदतर, टर्बो सुविधा कभी-कभी सिस्टम के वास्तविक तापमान पर जितनी अधिक होती है क्योंकि यह सीपीयू लोड पर होती है, इसलिए टावर की शीतलन प्रणाली सीपीयू चश्मे जितनी गति को प्रभावित करती है। एक विशेष एएमडी ए 10 (बुलडोजर) पर, उदाहरण के लिए, मैंने देखा कि यह दो धागे पर 3.7ghz पर चल रहा है। जब यह तीसरा धागा शुरू होता है, तो चौथाई शुरू होने पर 3.4ghz तक गिर जाता है। चूंकि यह एक एकीकृत जीपीयू भी है, इसलिए यह लगभग 3.0ghz तक गिर गया जब चार धागे और जीपीयू काम कर रहे थे (ए 10 सीपीयू आंतरिक रूप से उच्च लोड परिदृश्यों में जीपीयू को प्राथमिकता देता है); लेकिन अभी भी 2 धागे और जीपीयू सक्रिय के साथ 3.6ghz जरूरी हो सकता है। चूंकि मेरा एप्लिकेशन सीपीयू और जीपीयू दोनों का इस्तेमाल करता है, यह एक महत्वपूर्ण खोज थी। मैं प्रक्रिया को दो सीपीयू-बाउंड धागे तक सीमित करके समग्र प्रदर्शन में सुधार करने में सक्षम था (अन्य दो साझा कोर अभी भी सहायक थे, उन्होंने GPU सर्विसिंग थ्रेड्स के रूप में कार्य किया - जीपीयू को नए डेटा को धक्का देने के लिए जागने और प्रतिक्रिया देने में सक्षम, जैसी जरूरत थी)।
... लेकिन साथ ही, 4x थ्रेड पर मेरा एप्लिकेशन उच्च गुणवत्ता वाले शीतलन डिवाइस के साथ सिस्टम पर बहुत बेहतर प्रदर्शन कर सकता है। यह सब बहुत जटिल है।
निष्कर्ष: कोई अच्छा जवाब नहीं है, और क्योंकि सीपीयू एसएमटी/टर्बो डिज़ाइन का क्षेत्र विकसित रहता है, मुझे संदेह है कि जल्द ही कोई अच्छा जवाब होगा। आज आप जो भी सभ्य ह्युरिस्टिक बनाते हैं वह कल आदर्श परिणाम नहीं दे सकता है। तो मेरी सिफारिश है: इस पर अधिक समय बर्बाद मत करो। कोर गणनाओं के आधार पर कुछ अनुमान लगाएं जो आपके उद्देश्यों को स्थानीय रूप से उपयुक्त बनाता है, इसे कॉन्फ़िगर/स्विच द्वारा ओवरराइड करने की अनुमति दें, और आगे बढ़ें।
मैं न्यूनतम संख्या के लिए इष्टतम मान खोजना चाहता हूं। थ्रेड/अधिकतम संख्या का। सर्वोत्तम प्रदर्शन और पूर्ण संसाधन उपयोग प्राप्त करने के लिए उपर्युक्त सिस्टम कॉन्फ़िगरेशन के आधार पर नमूना अनुप्रयोग के लिए थ्रेड का। – Santosh
यदि आप 'हेरिस्टिक' उत्तरों के साथ नहीं जाना चाहते हैं, तो जो कुछ भी बचा है वह प्रयोगात्मक डिज़ाइन है। कुछ सेटिंग्स आज़माएं, और आपको निश्चित रूप से स्थानीय अधिकतम/न्यूनतमता मिल जाएगी। –