2009-02-02 5 views
8

एक तार्किक दृष्टिकोण से एक आवेदन को दर्जनों या सैकड़ों धागे की आवश्यकता हो सकती है, जिनमें से कुछ हम ज्यादातर समय सोते हैं, लेकिन बहुत कम हमेशा एक साथ चल रहे होंगे। सवाल यह है: क्या यह किसी प्रणाली में प्रोसेसर की तुलना में अधिक समवर्ती धागे को बढ़ाने के लिए कोई समझ में आता है, या यह एक अपशिष्ट है?क्या प्रति प्रोसेसर में एक से अधिक धागे को उगाने का अर्थ है?

मैंने कुछ सर्वर अनुप्रयोगों को देखा है जो कार्यों को लॉजिकल रूप से प्रबंधित करने के लिए शेड्यूलर को लागू करते हैं (अक्सर नौकरियां कहा जाता है), लेकिन बहुत सारे थ्रेड भी फैलते हैं, इसलिए मुझे नहीं लगता कि लाभ कहां है।

अग्रिम धन्यवाद।

उत्तर

24

निश्चित रूप से। यदि आपका सॉफ़्टवेयर डिस्क या नेटवर्क IO का लगातार उपयोग करता है, तो आप कुछ और थ्रेड जोड़कर अक्सर थ्रूपुट को बेहतर बना सकते हैं। उन अतिरिक्त धागे जागृत होंगे और सामान कर रहे होंगे जबकि अन्य धागे आईओ पर अवरुद्ध हो रहे हैं।

+0

बिल्कुल, और यह एक * बहुत * सामान्य स्थिति है। परिदृश्य के विपरीत मैं चर्चा करता हूं, जो कुछ विशेष विषयों के बाहर दुर्लभ है। यदि ट्रैप एक-एक-एक-एक जवाब चाहता है, तो यह होना चाहिए। कैश का बेहतर उपयोग करने के साथ बिंदु पर – dmckee

3

हर आप किसी I/O ऑपरेशन यह एक सूत्र में यह जोड़ देना और यह आग अप करने के लिए एक तरह से पड़ता है के लिए इंतज़ार कर एक काम है। I/O ऑपरेशन समाप्त होने की प्रतीक्षा करते समय आपके थ्रेड को निलंबित कर दिया जाएगा, इसकी एक बड़ी संभावना है। जब यह जागृत हो जाता है तो परिणाम इसके लिए इंतजार कर रहा होगा।

2

क्योंकि सभी आधुनिक ओएस मल्टी टास्किंग हैं: प्रत्येक थ्रेड प्रोसेसर से समय साझा करता है। यह वास्तव में समवर्ती निष्पादन नहीं है लेकिन प्रोसेसर प्रति सेकंड हजारों अनुरोधों को संभाल सकता है, यह एक "स्पष्ट" समवर्ती निष्पादन है।

तो हाँ, यदि मामले की आवश्यकता है, तो यह एकल प्रोसेसर पर बहु-धागे को समझ में आता है।

+0

बहु सूत्रण धागे और संदर्भ स्विच की निर्धारण के लिए भूमि के ऊपर के साथ आता है, और यह एक बहुत अधिक कठिन करने के लिए सही है। इसलिए जब तक कि आपके प्रोग्राम को कई धागे से लाभ न हो, तब तक इसे अंधाधुंध रूप से जोड़ने के लिए यह समझ में नहीं आता है! – mghie

3

लाभों में से एक है जब आप अपने हार्डवेयर, जो की संभावना अधिक प्रोसेसर/कोर मिल जाएगा उन्नयन है।

+0

अधिक प्रोसेसर कोर के साथ चलने पर प्रोग्राम को अधिक थ्रेड बनाने के द्वारा इसे बेहतर तरीके से संभाला जा सकता है। सिस्टम की तुलना में अधिक धागे को अंधाधुंध रूप से शेड्यूल करने से सब कुछ धीमा हो सकता है। Schdeuling और संदर्भ स्विच एक लागत पर आते हैं। – mghie

4

संक्षिप्त उत्तर "हाँ" है।

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

आप multithread नहीं है, तो आप समय-निर्धारण का काम अपने आप को, जो एक अच्छी बात हो सकता है अगर है कि तुम क्या जरूरत है क्या कर रही अंत होगा, लेकिन सबसे शायद दोनों थकाऊ और अक्षम

6

यह कर सकते हैं हो जाएगा भावना अगर

  1. अपने प्रोग्राम डिजाइन लाभ, कि आप समानांतर कार्य है कि सबसे अच्छा धागे में लागू किया जाता है, या

  2. अपने धागे से कुछ आई/ओ बाध्य कर रहे हैं, ताकि वे का उपयोग नहीं करते प्रोसेसर/कोर अपने आप पर।

12

अन्य ने उन परिस्थितियों के बारे में बात की है जिनमें यह लगभग निश्चित रूप से समझ में आता है (जब आप किसी भी तरह की धीमी आईओ कर रहे होते हैं)।

  • अपने सूत्र सीपीयू बाध्य काम

और

  • धागे कर रहे हैं प्रत्येक एक बहुत उपयोग करना चाहते हैं (:

    यह नहीं एक अच्छा विचार है, तो हो सकता है यानी महत्वपूर्ण स्मृति के कैश आकार) कि ओवरलैप न करने की तुलना में

इस मामले में वहाँ अनावश्यक कैश छूट जाए के कारण की संभावना है।

+0

+1। – mghie

1

मैंने पाया कि जब डेटा पारसर्स जो एक नेटवर्क यह सबसे अच्छा है वर्णमाला (डेटा से संबंधित) के प्रत्येक अक्षर के लिए एक धागा बनाने के लिए पर डेटा के अपेक्षाकृत बड़े समूहों को संभालने के लेखन और कार्यक्रम मिल अधिक CPU और स्मृति बाध्य होने के लिए । आई/ओ बाध्यता नेटवर्क के साथ विरासत में है और डिस्क ऑपरेशंस एक बड़ी बाधा है ताकि आप क्रमशः काम करने की बजाय अन्य डेटा फ़ाइलों पर "प्रारंभ करें" भी हो सकें।

एक क्वाड-कोर पर, यह निश्चित रूप से समझ में चार से अधिक धागे शुरू करने के लिए होगा। यह असंभव है कि उन 4 धागे को कोर में से एक से अधिक में फैलाया जाएगा, खासकर आज के प्रोसेसर की गति के साथ।

1

हर्ब Sutter (संगामिति पर अग्रणी विशेषज्ञों में से एक), Pillars of Concurrency में से एक के अनुसार जवाबदेही और अलगाव के माध्यम से अतुल्यकालिक एजेंटों है। सार है: स्वतंत्र रूप से और कार्यों एसिंक्रोनस तरीके से चल रहे कार्यों के संदेश के माध्यम से संवाद स्थापित करने से

स्टे उत्तरदायी।

महान लेख (और एक पूरे के रूप श्रृंखला!)। मैं अभी भी पुस्तक की प्रतीक्षा कर रहा हूं।

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