2012-04-11 27 views
11

मैं एकल सूत्रण और बहु ​​सूत्रण प्रोग्रामिंग के बीच अंतर की एक गलतफहमी है, तो मैं निम्नलिखित प्रश्न का उत्तर सब कुछ स्पष्ट बनाना चाहते बीच का अंतर।गलतफहमी एकल सूत्रण और बहु ​​सूत्रण प्रोग्रामिंग

मान लीजिए 9 स्वतंत्र कार्य देखते हैं कि और मैं उन्हें एक एकल पिरोया कार्यक्रम और एक मल्टी-थ्रेडेड कार्यक्रम के साथ पूरा करने के लिए चाहते हैं।

एकल धागा:

- Execute task 1 
- Execute task 2 
- Execute task 3 
- Execute task 4 
- Execute task 5 
- Execute task 6 
- Execute task 7 
- Execute task 8 
- Execute task 9 

मल्टी पिरोया:

Thread1: असल में यह कुछ इस तरह हो जाएगा

- Execute task 1 
- Execute task 2 
- Execute task 3 

Thread2:

- Execute task 4 
- Execute task 5 
- Execute task 6 

Thread3:

- Execute task 7 
- Execute task 8 
- Execute task 9 

मैं समझता हूँ के रूप में, केवल एक धागा एक समय (सीपीयू मिल) पर निष्पादित किया जाएगा, और एक बार क्वांटम समाप्त हो गया है, धागा अनुसूचक होगा सीपीयू का समय किसी अन्य धागे को दें।

तो, जो कार्यक्रम पहले समाप्त हो जाएगी? क्या यह बहु थ्रेडेड प्रोग्राम (तार्किक रूप से) है? या यह सिंगल-थ्रेड प्रोग्राम है (चूंकि मल्टी-थ्रेडिंग में बहुत सारे संदर्भ-स्विचिंग हैं जो कुछ समय लेते हैं)? और क्यों? मैं की जरूरत है एक अच्छा स्पष्टीकरण :) कृपया

+2

'कौन सा प्रोग्राम पहले खत्म होगा'? उत्तर: यह –

+0

पर निर्भर करता है बहुत सी चीजें असीमित रूप से होती हैं, यहां तक ​​कि एक ही CPU पर: मेमोरी फ़ेचिंग, डिस्क I/O, नेटवर्क I/O ... संदर्भ स्विच अक्सर "मजबूर टाइमआउट" के दौरान वरीयता के साथ होते हैं। वैसे भी, वास्तव में वास्तव में केवल एक सीपीयू कौन है? –

+0

प्रश्न अपने वर्तमान रूप में असंभव है। क्या कार्य एक-दूसरे से स्वतंत्र हैं, या क्या वे पहले के कार्यों से परिणामों पर भरोसा करते हैं? कितने सीपीयू/कोर उपलब्ध हैं? क्या कार्य प्रोसेसर बाध्य हैं या I/O बाध्य हैं? समांतरता के लिए आदर्श परिस्थितियों में (एकाधिक सीपीयू/कोर, प्रोसेसर बाध्य, स्वतंत्र कार्य) बहुप्रचारित संस्करण * शायद * तेज होगा। लेकिन शायद नहीं। – dlev

उत्तर

17

यह निर्भर करता है।

कितने CPUs है? आपके कार्यों में कितना I/O शामिल है?

यदि आपके पास केवल 1 सीपीयू है, और कार्यों में कोई अवरोध I/O नहीं है, तो एकल थ्रेडेड बहु-थ्रेडेड से बराबर या तेज हो जाएगा, क्योंकि धागे को स्विच करने के लिए ओवरहेड है।

यदि आपके पास 1 सीपीयू है, लेकिन कार्यों में बहुत से ब्लॉकिंग I/O शामिल हैं, तो आप थ्रेडिंग का उपयोग कर एक स्पीडअप देख सकते हैं, मानते हैं कि I/O प्रगति पर होने पर काम किया जा सकता है।

यदि आपके पास एकाधिक सीपीयू हैं, तो आपको एकल थ्रेडेड पर बहु-थ्रेडेड कार्यान्वयन के साथ एक गति दिखाई देनी चाहिए, क्योंकि 1 से अधिक धागे समानांतर में निष्पादित हो सकते हैं। बेशक, कार्यों को I/O वर्चस्व नहीं किया जाता है, इस स्थिति में सीमित कारक आपकी डिवाइस की गति है, सीपीयू शक्ति नहीं।

+0

यदि आपके पास 1 सीपीयू है, लेकिन कार्यों में बहुत से ब्लॉकिंग I/O शामिल हैं, तो एक बड़ी गति होगी क्योंकि सभी नौ कार्यों को कुछ CPU प्राप्त होने की संभावना है जब वे पूर्ण IO द्वारा संकेतित होते हैं। –

+1

और सीपीयू द्वारा आप वास्तव में कोर का मतलब है? अधिकांश कंप्यूटरों में एक सिंगल सीपीयू होता है, लेकिन सीपीयू में कई कोर होते हैं। – Guffa

+0

हां [15 वर्ण] – hvgotcodes

6

मैं समझता हूँ के रूप में, केवल एक धागा एक समय

ऐसा हो सकता है अगर सीपीयू केवल एक कोर था पर निष्पादित किया जाएगा। आधुनिक CPUs में एकाधिक कोर होते हैं, और समानांतर में एकाधिक धागे चला सकते हैं।

कार्यक्रम तीन धागे चल लगभग तीन गुना तेजी से भाग जाता है। यहां तक ​​कि यदि कार्य स्वतंत्र हैं, फिर भी कंप्यूटर में कुछ संसाधन हैं जिन्हें थ्रेड के बीच साझा किया जाना चाहिए, जैसे मेमोरी एक्सेस।

2

अच्छा, यह पूरी तरह से भाषा अज्ञेयवादी नहीं है। कुछ प्रोग्रामिंग भाषाएं वास्तविक थ्रेड का समर्थन नहीं करती हैं। यही है, निष्पादन के धागे प्रोग्राम द्वारा परिभाषित किए जा सकते हैं, लेकिन दुभाषिया एकल थ्रेडेड है इसलिए सभी निष्पादन सीपीयू के एक कोर पर है।

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

+0

कार्य शायद ही कभी वास्तव में स्वतंत्र हैं। मेरे अनुभव में, आम तौर पर क्या होता है यह है कि आपका कोड अब सीपीयू बाध्य नहीं है क्योंकि यह एक थ्रेड और/या कोर के साथ था, लेकिन अब इसके बजाय I/O बाध्य होने की संभावना है। चार कोरों का उपयोग करने के प्रयासों को अक्सर अधिकतर बर्बाद कर दिया जाता है। यह सबक कठिन तरीका सीखा है। –

+1

@ ए-बी-बी, आप सही हैं। यह सुनिश्चित करना भी महत्वपूर्ण है कि समवर्ती गणना अत्यधिक ओवरहेड को उचित ठहराने के लिए काफी जटिल है। हालांकि, आईओ के संदर्भ में, कल्पना करें कि एक आईओ गहन कार्य है। उस कार्य को अभी भी बहु-थ्रेडिंग से लाभ होगा क्योंकि एक धागा कंप्यूटिंग कर सकता है जबकि दूसरा संचार बस का उपयोग कर रहा है। अंत में, विशेषज्ञ वास्तुकला डिजाइन हैं जो कुशल समानांतर आईओ प्रदर्शन कर सकते हैं। –

2

धारणा सेट: कोई कोर हाइपरथ्रेडिंग वाला सिंगल कोर; कार्य सीपीयू बाध्य हैं; प्रत्येक कार्य में 3 क्वांटा समय लगता है; प्रत्येक शेड्यूलर आवंटन 1 क्वांटा तक सीमित है; फीफो शेड्यूलर अप्रत्याशित; सभी धागे एक ही समय में शेड्यूलर मारा; सभी संदर्भ स्विचों को एक ही समय की आवश्यकता होती है;

  • (प्रत्येक 3 कार्य होते हैं) एकल प्रक्रिया, तीन सूत्र:

    • टेस्ट 1:: एकल प्रक्रिया, एकल थ्रेड
    • टेस्ट 2 (सभी 9 कार्य शामिल हैं)

      प्रक्रियाओं के रूप में निम्नानुसार चित्रित कर रहे हैं टेस्ट 3: तीन प्रक्रियाओं, प्रत्येक एकल थ्रेड

    • टेस्ट 4 (प्रत्येक 3 कार्य होते हैं): तीन प्रक्रियाओं, प्रत्येक तीन धागे (शामिल एक कार्य प्रत्येक)
    साथ

    उपरोक्त धारणाओं के साथ, वे सभी एक ही समय में खत्म होते हैं। ऐसा इसलिए है क्योंकि सीपीयू के लिए निर्धारित समय की एक समान मात्रा है, संदर्भ स्विच समान हैं, कोई हस्तक्षेप नहीं है, और आईओ के लिए कुछ भी इंतजार नहीं कर रहा है।

    इसकी प्रकृति में अधिक गहराई के लिए, कृपया this book खोजें।