2012-12-22 11 views
5

मेरे खेल पर एक से अधिक थ्रेड का निर्माण एक बहु सूत्रण वास्तुकला का उपयोग करता है, धागे इस तरह से बाहर रखा के साथ:ही हार्डवेयर इकाई

  • मुख्य: उच्च स्तरीय वास्तुकला के लिए जिम्मेदार
  • संसाधन: के लिए जिम्मेदार अतुल्यकालिक फ़ाइल मैं/हे
  • नेटवर्क: नेटवर्क को अवरुद्ध करने के लिए जिम्मेदार आई/ओ
  • श्रमिक: कर CPU- सघन नौकरियों

अभी, (हार्डवेयर_थ्रेड्स - 3) वर्कर थ्रेड हैं, प्रत्येक अप्रयुक्त हार्डवेयर इकाई के लिए एक है, लेकिन मैं "संसाधन" और "नेटवर्क" धागे को एक इकाई पर जोड़कर एक और जोड़ना चाहता हूं क्योंकि दोनों धागे खर्च करने जा रहे हैं बहुत समय बेकार है।

  1. क्या यह बूस्ट :: थ्रेड के साथ सी ++ में संभव है?
  2. क्या यह भी एक सार्थक अनुकूलन है?
+0

* "क्या यह भी एक सार्थक अनुकूलन है?" * - शायद नहीं। – Pubby

+1

std :: धागा मानक में है। इसका उपयोग करने के बारे में सोचो। –

+0

std :: थ्रेड विंडोज सिस्टम पर ठीक से काम नहीं करता है। यह कार्यात्मक रूप से बूस्ट :: थ्रेड के समान काम है, इसलिए यदि मुझे कभी भी स्विच की आवश्यकता है तो आसान है। – jmegaffin

उत्तर

5

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

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

है कि क्या यह एक सार्थक अनुकूलन अच्छी तरह से है, शायद नहीं के लिए

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

+0

यही वह था जो मैं सोच रहा था। मैं सिर्फ यह जानना चाहता था कि क्या अतिरिक्त हार्डवेयर इकाई को निचोड़ना बिल्कुल फायदेमंद था, लेकिन मुझे नहीं लगता। – jmegaffin

1

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

आप कितने धागे होना चाहिए करने के लिए के रूप में, और क्या यह "लायक" कम या ज्यादा धागे चल रहा है? जवाब देने के लिए यह एक बहुत ही कठिन सवाल है। सीपीयू गहन धागे के लिए, सिस्टम में सीपीयू कोर से अधिक होने में वास्तव में कोई बात नहीं है, क्योंकि आपको आगे के थ्रेड होने से अधिक काम नहीं मिलेगा [अभी भी सॉफ्टवेयर आर्किटेक्चर के कारण अधिक धागे होने के कारण हो सकते हैं, लेकिन आमतौर पर यह आमतौर पर होता है क्योंकि सॉफ़्टवेयर बहुत जटिल हो रहा है, और उम्मीद है कि आप वहां नहीं पहुंच पाएंगे ...]

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

सारांश में, शायद अंधे आदमी के रूप में "बहुत कम ऊन के लिए चिल्ला का एक बहुत" कहा जब वह सुअर sheared - दूसरे शब्दों में, काम के बहुत सारे, बहुत ज्यादा नहीं लाभ में।

+0

नहीं। आपको अधिक धागे होने की आवश्यकता है क्योंकि सभी धागे छोटी मात्रा के लिए अवरुद्ध होते हैं- उदाहरण के लिए, स्मृति आवंटन या सिस्टम कॉल। यह आमतौर पर चलने के लिए तैयार होने वाले दो धागे तैयार करना सबसे अच्छा होता है। – Puppy

+0

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

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