2013-02-27 23 views
7

मेरे पास 8 फाइलें हैं। उनमें से प्रत्येक लगभग 1.7 जीबी है। मैं उन फ़ाइलों को बाइट सरणी में पढ़ रहा हूं और यह ऑपरेशन पर्याप्त तेज़ है।एक बहु-कोर वातावरण में BufferedReader

प्रत्येक फ़ाइल तो इस प्रकार पढ़ा जाता है:

BufferedReader br=new BufferedReader(new InputStreamReader(new ByteArrayInputStream(data))); 

जब एक अनुक्रमिक अर्थ में एक सिंगल कोर का उपयोग करके संसाधित यह abour 60 सेकंड पूरा करने के लिए ले जाता है। हालांकि, 8 अलग-अलग कोरों पर गणना को वितरित करते समय प्रति फ़ाइल 60 सेकंड से अधिक समय लगता है।

चूंकि डेटा सभी स्मृति में हैं और कोई आईओ ऑपरेशंस नहीं किया गया है, तो मुझे लगता है कि प्रति कोर एक फ़ाइल को संसाधित करने में 60 सेकंड से अधिक समय नहीं लगना चाहिए। तो, कुल 8 फाइलें 60 सेकंड से अधिक में पूरी होनी चाहिए लेकिन यह मामला नहीं है।

क्या मुझे BufferedReader व्यवहार के बारे में कुछ याद आ रहा है? या उपर्युक्त कोड में इस्तेमाल किए गए पाठकों में से कोई भी।

यह उल्लेख है कि मैं पहली बार फ़ाइलों को अपलोड करने के लिए इस कोड का उपयोग कर रहा लायक हो सकता है:

byte[] content=org.apache.commons.io.FileUtils.readFileToByteArray(new File(filePath)); 

सब कुछ खत्म कोड इस तरह दिखता है:

For each file 
read the file into a byte[] 
add the byte[] to a list 
end For 
For each item in the list 
create a thread and pass a byte[] to it 
end For 
+0

फाइलें कितनी डिस्क ड्राइव वितरित की जाती हैं? या वे सभी एक ही ड्राइव पर संग्रहीत हैं? –

+2

ऐसी बड़ी फ़ाइलों के लिए मैं दृढ़ता से एनआईओ का उपयोग करने की सिफारिश करता हूं। कृपया इस आलेख को जांचें: http://www.javalobby.org/java/forums/t17036.html, यह सहायक हो सकता है – n1ckolas

+0

फ़ाइलें बाइट [] में संग्रहीत इन-मेमोरी हैं। डिस्क ड्राइव यहां प्रासंगिक नहीं हैं। @RJRyV – DotNet

उत्तर

3

कैसे आप वास्तव में "गणना वितरण कर रहे हैं "? क्या सिंक्रनाइज़ेशन शामिल है? क्या आप 8 फाइलें पढ़ने के लिए बस 8 धागे बना रहे हैं?

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

+0

ऑब्जेक्ट्स के बीच सिंक्रनाइज़ेशन समस्या थी। धन्यवाद ब्रेट – DotNet

2

आपकी प्रणाली कितनी मेमोरी है?

8 x 1.7 जीबी, + ऑपरेटिंग सिस्टम ओवरहेड, इसका मतलब यह हो सकता है कि वर्चुअल मेमोरी/पेजिंग को खेलना है। जो रैम की तुलना में स्पष्ट रूप से धीमा है।

मैं आपको सराहना करता हूं कि प्रत्येक फ़ाइल मेमोरी में है, लेकिन क्या आपके पास वास्तव में 16 जीबी फ्री रैम है या क्या एक सारणी स्तर पर और अधिक चल रहा है?

यदि संदर्भ स्विच को लगातार पृष्ठों को भी स्विच करना पड़ता है, तो यह एक बढ़ी हुई समय की व्याख्या करेगा।

+0

आपके उत्तर के लिए धन्यवाद, मेरे पास डेटा को समायोजित करने के लिए पर्याप्त मेमोरी है। वर्चुअल मेमोरी का कोई पेजिंग या उपयोग शामिल नहीं है। – DotNet

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