मेरे पास 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
फाइलें कितनी डिस्क ड्राइव वितरित की जाती हैं? या वे सभी एक ही ड्राइव पर संग्रहीत हैं? –
ऐसी बड़ी फ़ाइलों के लिए मैं दृढ़ता से एनआईओ का उपयोग करने की सिफारिश करता हूं। कृपया इस आलेख को जांचें: http://www.javalobby.org/java/forums/t17036.html, यह सहायक हो सकता है – n1ckolas
फ़ाइलें बाइट [] में संग्रहीत इन-मेमोरी हैं। डिस्क ड्राइव यहां प्रासंगिक नहीं हैं। @RJRyV – DotNet