java - थ्रेड्स की कुशल संख्या



windows multithreading (4)

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

https://src-bin.com


Answer #1

कोई प्रति-ओएस उत्तर नहीं है यह उन कार्यों के विशिष्ट सेट पर निर्भर करेगा जो आपके कोड का प्रदर्शन कर रहे हैं। आपको अपने एप्लिकेशन को विभिन्न कॉन्फ़िगरेशन के साथ बेंचमार्क करना चाहिए, यह देखने के लिए कि सबसे अधिक प्रदर्शनकर्ता कौन है।

मल्टीथ्रेडिंग के बारे में कुछ सामान्य युक्तियां:

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

  • आप उन कार्यों को समानांतर करके कुछ गति प्राप्त कर सकते हैं जो मशीन के एक ही हिस्से का उपयोग नहीं करते हैं। तो, यह देखते हुए कि आप कहते हैं कि आपके पास "I / O" के बराबर मूल्य है और कार्य की गणना करें, आप उन लोगों को अलग थ्रेड में अलग करना चाहते हैं - फिर भी, यह मानता है कि आदेश महत्वपूर्ण नहीं है।

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


Answer #2

प्रदर्शन धागे का उपयोग करने के लिए एकमात्र कारण से दूर है।

असल में, किसी भी बहु-धागा प्रोग्राम को एक और अधिक जटिल धागे से सिम्युलेटेड किया जा सकता है, तो वास्तव में जो धागे वास्तव में कर रहे हैं वह आपके कोड को सरल कर रहा है, जरूरी नहीं कि यह तेजी से बना।

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


Answer #3

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


Answer #4

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

(किसी वर्तनी / प्रारूपण समस्याओं के लिए क्षमा करें, मैंने अपने फोन को बंद कर दिया है)






jvm