मेरे पास एक बड़ी फाइलें हैं जहां मैं Binary
डेटा स्टोर करता हूं। इन फ़ाइलों को पढ़ने और लिखने के कई धागे हैं, मेरा वर्तमान डिज़ाइन उन्हें एक Lock
का उपयोग करके सिंक्रनाइज़ करता है। इस तरह, मेरे पास फ़ाइल के लिए ReadWriteMode
में केवल एक Handle
है, और सभी धागे उस एकल लॉक के लिए लड़ते हैं जब वे कुछ I/O करना पसंद करते हैं।समवर्ती फ़ाइल हास्केल में पढ़ती/लिखती है?
मैं एकाधिक पाठकों को समवर्ती रूप से काम करने की अनुमति देकर इस पर सुधार करना चाहता हूं। मैंने जो कोशिश की वह RWLock
का उपयोग कर रहा था और कई हैंडल खुले थे। RWLock
यह सुनिश्चित करेगा कि केवल एक थ्रेड फ़ाइल को संशोधित करता है, जबकि कई धागे (जितने मैंने खुले हैं, एक संकलन-समय निरंतर) को समवर्ती रूप से पढ़ने की अनुमति है। इसे चलाने की कोशिश करते समय, मुझे इस तथ्य से मारा गया कि रनटाइम allows only oneHandle
ReadWriteMode
में किसी भी समय फ़ाइल के लिए मौजूद है।
मैं इस स्थिति को कैसे हल कर सकता हूं? मुझे लगता है कि Handle
प्राप्त करने/जारी करने का एक महंगा ऑपरेशन है, इसलिए RWLock
प्राप्त करने के बाद फ़ाइल को उचित मोड में खोलना वास्तव में एक विकल्प नहीं है। या शायद एक पैकेज है जो जावा FileChannel
के read और write विधियों के समान एपीआई पेश करता है?
पीएस: मैं 32 बिट आर्किटेक्चर का समर्थन करना चाहता हूं, इसलिए स्मृति-मैप किए गए आईओ फाइलों के लिए संभव नहीं है> 4 जीआईबी, है ना?
आप फ़ाइलों लेखन को पढ़ने के लिए किसी भी समानांतर आई/ओ लाइब्रेरी का उपयोग कर की कोशिश की? उनमें से कुछ हैं, एचडीएफ 5, पीएनईटीसीडीएफ, सियोनलिब ... वे सभी साझा और वितरित मेमोरी सिस्टम दोनों में समानांतर में फ़ाइलों को समवर्ती पढ़ने/लिखने का समर्थन करते हैं और वे सभी ओ (10^4) कोर तक बहुत अच्छे हैं । – gnzlbg