2014-09-07 7 views
5

मैं कई फाइलें पढ़ना और पार्स करना चाहता हूं। चूंकि वहां 10000 से अधिक फाइलें हैं जिन्हें पार्स किया जाना है, इसलिए मैं थ्रेड का उपयोग करके इस प्रक्रिया को तेज़ी से बनाना चाहता हूं।एकाधिक फ़ाइलों से पढ़ने के लिए मैं जावा बहु-थ्रेडिंग का उपयोग कैसे कर सकता हूं?

उदाहरण के लिए, यदि मेरे पास 5 धागे थे, तो मैं उन्हें सभी को एक निश्चित संख्या में फ़ाइलों को एक साथ पढ़ना चाहता हूं ताकि पढ़ने और पार्सिंग की प्रक्रिया तेज हो। क्या यह संभव है? क्या मैं इसे थ्रेड में विभाजित करके कोई महत्वपूर्ण गति-अप प्राप्त करूंगा? यदि हां, तो मैं यह कैसे कर सकता हूं?

पीएस मैं बाहरी पुस्तकालयों का उपयोग करने के खिलाफ नहीं हूं।

मैं JDK 1.6

+0

"सभी धागे एक साथ एक फ़ाइल को पढ़ने के लिए। ताकि प्रत्येक थ्रेड 2 फाइलों को पार्स कर समाप्त हो जाए" इसका क्या अर्थ है? क्या आप दो थ्रेड को दो फाइलों को पढ़ने के लिए एक ही फाइल या एक थ्रेड को पढ़ना चाहते हैं? –

+0

@ कोड-अपरेंटिस विवरण अपडेट किया गया। इसका मतलब है कि आपके पास 10 फाइलें और 5 धागे हैं। अब आप चाहते हैं कि प्रत्येक थ्रेड एक साथ 1 अलग फ़ाइल को पार्स करे। मुझे उम्मीद है कि मैं – Mimanshu

+1

स्पष्ट हूं धागे की संख्या को अधिक न करें। याद रखें कि हार्ड डिस्क बहुप्रचारित नहीं है। – EJP

उत्तर

0

साथ काम कर रहा हूँ समानांतर में एक फ़ाइल को पढ़ने के लिए How to read all lines of a file in parallel in Java 8 देखें।

आपके मामले में, मैं केवल थ्रेड के पूल को लॉन्च करता हूं क्योंकि आपकी प्रक्रिया की अनुमति होगी, प्रत्येक को "पूरी फ़ाइल पढ़ें" अनुरोध के लिए अनुरोध किया गया है, और ओएस तय करेगा कि कौन सा ओएस तय करेगा किस क्रम में पढ़ने के लिए फ़ाइलें।

1

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

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

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