2012-01-30 16 views
6

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

मेरे पास एक लैपटॉप है जो क्वाडकोर प्रोसेसर है - प्रत्येक कोर में एक थ्रेड चलाकर एक बहु-थ्रेड प्रोग्राम को तेजी से चलाने के लिए संभव है? कारण मैं इस सवाल से पूछ रहा हूं क्योंकि पुस्तक का उल्लेख है कि केवल एक सच्ची बहु प्रोसेसर प्रणाली एक ही समय में कई चीजें कर सकती है।

+1

आगे निकल गया और इसमें मल्टीथ्रेडिंग टैग जोड़ा - यह सिर्फ जावा-केंद्रित प्रश्न नहीं है। उम्मीद है कि आपको कुछ बेहतरीन जवाब मिलेंगे। – Makoto

+0

आपके द्वारा पढ़ा गया आलेख शायद बहु-कोर प्रोसेसर से पहले समय से था, इसलिए कहता है कि केवल बहु-प्रोसेसर कंप्यूटर इसका उपयोग कर सकता है। – Hurda

उत्तर

7

यहां तक ​​कि एक भी सीपीयू एक ढीले अर्थ में "एक ही समय में कई चीजें" कर सकता है, लेकिन वे वास्तव में समानांतर में नहीं हैं। आप एक कोर पर चलाने के लिए 100 धागे शुरू कर सकते हैं और उन्हें समय स्लाइस मिलेगा, जिनमें से प्रत्येक कुछ निर्देश चला सकता है, इस प्रकार इंप्रेशन बना रहा है कि वे सभी एक ही समय में निष्पादित कर रहे हैं।

मैं एक बहुत पोस्ट में कहा है के रूप में: करने के लिए एम:

  1. उपयोगकर्ता धागे धागे अनुप्रयोगों द्वारा शुरू कर रहे हैं और एन मैप की जाती हैं: multithreading on dual core machine?

    अवधि धागे आम तौर पर तीन अमूर्त परतों को शामिल किया गया :

  2. कर्नेल धागे, जो धागे ऑपरेटिंग सिस्टम द्वारा प्रबंधित कर रहे हैं, मैप किया न: एम:
  3. हार्डवेयर धागे, जो वास्तविक भौतिक संसाधन उपलब्ध हैं।

जावा धागे उपयोगकर्ता धागे हैं। हार्डवेयर सीपीयू के रूप में आपके सीपीयू गिनती में 4 कोर। चूंकि मानचित्रण परतों में एन: एम है, आप देख सकते हैं कि आपके पास कई छोटे थ्रेड हार्डवेयर थ्रेड के लिए मैप किए जा सकते हैं।

अब, यह कहा है, वहाँ आम तौर पर अपने स्वयं के अजीब समस्याओं के साथ प्रत्येक थ्रेड गतिविधियों के दो वर्गों, कर रहे हैं:

  1. आई/ओ धागे: इन धागे पढ़ने/लिखने पर इंतजार कर रहे अपने समय के सबसे खर्च एक धारा से संचालन और इस दौरान अवरुद्ध हैं (वे निष्पादन के लिए निर्धारित नहीं हैं जब तक कि उन्हें उठाने के लिए कोई घटना न हो)। सीपीयू पर प्रकाश है और उनमें से कई एक ही कोर पर भी एक साथ चल सकते हैं।
  2. कम्प्यूटेशनल धागे: ये थ्रेड बहुत अधिक संख्या में क्रंचिंग करते हैं और अधिकतम CPU का उपयोग करते हैं। आम तौर पर अधिक से अधिक शुरू करने (उपलब्ध कोर की संख्या 2x) क्योंकि सीपीयू कार्यात्मक इकाइयों की एक सीमित संख्या है इस तरह के धागे, प्रदर्शन में कमी करने जा रहा है: ALUs, FPUs, आदि

धागे की द्वितीय श्रेणी से ऊपर की सुविधा देता है आप वास्तव में लाभ प्राप्त करते हैं या अपने क्वाड-कोर CPU पर एक बहुप्रचारित जावा प्रोग्राम चलाते हैं।

import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 
import java.util.concurrent.TimeUnit; 

class ThreadTask implements Runnable { 

    private int total = 0; 

    public ThreadTask(int total) { 
     this.total = total; 
    } 

    @Override 
    public void run() { 
     int value = 0; 
     for(int i = 0; i < total; i++) { 
      value = i * i; 
     } 
    }  
} 

public class Test { 

    public static void main(String[] args) throws InterruptedException { 

     int total = 1000000000; 

     long start = System.currentTimeMillis(); 
     long value = 0; 
     for(int i = 0; i < total; i++) { 
      value = i * i; 
     }  
     long stop = System.currentTimeMillis(); 

     System.out.println((stop - start) + " ms"); 

     ExecutorService exec = Executors.newFixedThreadPool(4); 
     start = System.currentTimeMillis(); 
     for(int i = 0; i < 4; i++) { 
      exec.submit(new ThreadTask(total/4)); 
     } 
     exec.shutdown(); 
     exec.awaitTermination(10, TimeUnit.SECONDS); 
     stop = System.currentTimeMillis(); 

     System.out.println((stop - start) + " ms");  
    } 
} 

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

+0

धन्यवाद ट्यूडर - यह कोशिश करेगा :) –

1

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

मापें इसे प्रयोगों के साथ परीक्षण करें।

2

एक बहु-कोर प्रोसेसर आपके आवेदन में आपके द्वारा किए गए कोर की संख्या तक वास्तव में समानांतरता को समानांतर कर सकता है। आपके मामले में, वह 4 धागे होंगे। Wikipedia पर बहु-कोर बनाम बहु-प्रोसेसर के बारे में और पढ़ें। ऐसा कहने के बाद, आप एक कोर कोर पर एक बहु थ्रेडेड एल्गोरिदम के साथ प्रदर्शन लाभ का एहसास कर सकते हैं, इस तथ्य के बावजूद कि आपके पास केवल एक प्रोसेसर है।

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

यह भी देखें StackOverflow प्रश्न।

1

मैं पुष्टि कर सकता हूं कि, मेरे आई 3 लैपटॉप पर, समानांतर में चलने वाले एल्गोरिदम एक सीरियल एल्गोरिदम के लगभग दो गुना तेजी से पहलू होते हैं।

अधिक संदर्भ नीचे जुड़ते ...

ये कोई आई/ओ के साथ अत्यधिक कम्प्यूटेशनल एल्गोरिदम हैं। असल में, एन बड़े सरणी पर आंकड़ों की गणना, जहां प्रत्येक सरणी स्वतंत्र रूप से की जा सकती है। मुझे लगता है कि 2-4 धागे के थ्रेड पूल का उपयोग करके सभी गति एक ही गति वृद्धि के बारे में पैदा होती है - 2 एक्स। 8 या अधिक धागे पर जाकर, चीजें थोड़ा धीमा हो जाती हैं क्योंकि आपको अधिक विवाद मिलता है (और अधिक मेमोरी का उपयोग कर रहे हैं)। अधिक कोर के साथ प्रोसेसर पर ये मान बदल जाएंगे।

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