2010-10-01 9 views
8

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

अद्यतन:

संबंधित प्रश्न:

+1

मामूली शैक्षणिक असाइनमेंट के अपवाद के साथ, मुझे लगता है कि अधिकांश जावा प्रोग्राम बहु-थ्रेडेड हैं। मुझे हमेशा लगता है कि पहली बार स्विंग के साथ काम करने वाले छात्रों से टिप्पणियां सुनना मजेदार है क्योंकि उन्हें ConcurrentModificationException का सामना करना पड़ता है क्योंकि उन्हें वास्तव में बिना किसी वास्तविकता के बहु-थ्रेडेड वातावरण में मजबूर होना पड़ता है। –

उत्तर

16

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

वहाँ मई कुछ प्रयोगात्मक/अनुसंधान JVMs जो कोड है जो JIT शर्मनाक समानांतर होने के रूप में देखा जा सकता है के क्षेत्रों parallelize करने की कोशिश हो, लेकिन मुझे लगता है कि उत्पादन प्रणालियों के लिए ऐसा कुछ के बारे में सुना नहीं किया है। यहां तक ​​कि यदि JIT ने इस तरह की चीज को देखा है, तो यह शायद से को पहले स्थान पर समांतरता के लिए आपके कोड को कम से कम प्रभावी होगा। (अनुक्रमिक रूप से कोड लिखना, आप डिज़ाइन निर्णय लेने में आसानी से समाप्त हो सकते हैं जो स्वचालित समानांतरता को अनजाने में बाधित कर सकता है।)

+0

क्या इसका मतलब यह है कि इनबिल्ट फ़ंक्शन की तरह Arrays.sort() का कोई प्रभाव नहीं होगा, भले ही आपके पास बहु-कोर प्रोसेसर है क्योंकि सॉर्ट फ़ंक्शन समानांतर निष्पादन के लिए डिज़ाइन नहीं किया गया है। – Emil

+0

@ एमिल: सही - जब तक कार्यान्वयन कभी भी कई धागे का उपयोग करने के लिए नहीं बदला जाता है। –

+2

भले ही आपका जावा प्रोग्राम शर्मनाक अनुक्रमिक है, एक अतिरिक्त कोर होने से आपकी मेजबान मशीन अन्य काम (फ़ाइल सिस्टम, निगरानी, ​​नेटवर्क प्रोसेसिंग) को और अधिक कुशलतापूर्वक करने की अनुमति देगी। –

1

मुझे लगता है कि बहु-थ्रेडेड एल्गोरिदम का उपयोग करने से नहीं लगता है कि प्रभावशीलता के लिए कोड किए जाने तक बहु-कोर प्रोसेसर का प्रभावी ढंग से उपयोग किया जाएगा।

http://java.dzone.com/news/building-multi-core-ready-java

+2

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

+0

@ स्टीफन - धन्यवाद। आप से सहमत। बहु-थ्रेडेड ऐप्स की प्रभावशीलता जोड़ने के लिए मेरा जवाब संपादित किया। –

4

आपका क्रियान्वयन मल्टी-थ्रेडेड के लिए अपने निपटान में कई कोर का लाभ लेने के लिए की जरूरत है - यहाँ एक अच्छा लेख जो डेवलपर्स के लिए मल्टी कोर प्रोसेसर का इस्तेमाल कर रही बारे में बात करती है।

आपकी प्रणाली पूरी तरह से एक कोर प्रति चल रहे एप्लिकेशन या सेवा का उपयोग कर सकती है। हालांकि, प्रत्येक चल रहे एप्लिकेशन को अन्यथा लागू किए जाने तक एकल थ्रेड/कोर से काम करना होगा।

1

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

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

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