साझा संसाधन ==विवाद
परिभाषा के अनुसार एक सामान्य फ़ाइल को लिखना एक क्रमबद्ध ऑपरेशन है। आप इसे कई थ्रेड्स से लिखने का प्रयास करके कोई प्रदर्शन प्राप्त नहीं करते हैं, I/O एक सीमित सीमित संसाधन है, जो सबसे धीमे या सबसे अधिक भार वाले CPU की तुलना में कम बैंडविड्थ के क्रम में है।
साझा संसाधन तक समवर्ती पहुंच जटिल (और धीमी) हो सकती है
यदि आपके पास कई धागे हैं जो महंगी गणना कर रहे हैं तो आपके पास विकल्प हैं, यदि आप केवल एकाधिक धागे का उपयोग कर रहे हैं क्योंकि आपको लगता है कि आप कुछ तेज करने जा रहे हैं, तो आप इसके विपरीत करने जा रहे हैं। I/O के लिए विवाद हमेशा संसाधन तक पहुंच को धीमा कर देता है, यह लॉक प्रतीक्षा और अन्य ओवरहेड के कारण इसे कभी भी गति नहीं देता है।
आपके पास एक महत्वपूर्ण खंड होना चाहिए जो सुरक्षित हो और एक समय में केवल एक लेखक को अनुमति देता हो। किसी भी लॉगिंग लेखक के लिए बस स्रोत कोड देखें जो समवर्ती का समर्थन करता है और आप देखेंगे कि केवल एक ही थ्रेड है जो फ़ाइल को लिखता है।
यदि आपका आवेदन मुख्य रूप से है:
-
CPU बाध्य: आप कुछ लॉकिंग मैकेनिज्म/डेटा कंस्ट्रक्शन का उपयोग कर सकते हैं ताकि एक समय में कई में से केवल एक थ्रेड को फाइल में लिखा जा सके, जो एक भोले समाधान के रूप में एक संगामिति के दृष्टिकोण से बेकार होगा; यदि ये थ्रेड्स CPU में थोड़े I/O के साथ बंधे हैं तो यह काम कर सकता है।
-
मैं/ओ बाध्य: यह सबसे आम मामला है, आपको किसी प्रकार की कतार के साथ एक मैसेजिंग पासिंग सिस्टम का उपयोग करना चाहिए और सभी थ्रेड्स को एक कतार/बफर पर पोस्ट करना चाहिए और इससे एक ही थ्रेड खींचना चाहिए और फ़ाइल को लिखना चाहिए। यह सबसे स्केलेबल और लागू करने में आसान समाधान होगा।
जर्नलिंग - Async राइट्स
यदि आपको एक एकल सुपर लार्ज फ़ाइल बनाने की आवश्यकता है जहाँ लिखने का क्रम महत्वहीन है और प्रोग्राम CPU बाध्य है तो आप एक जर्नलिंग तकनीक का उपयोग कर सकते हैं।
प्रत्येक process
का पालन करें एक अलग फ़ाइल में लिखें और फिर अंत में एक से अधिक फ़ाइलों को एक बड़ी फ़ाइल में संयोजित करें। यह बहुत पुराना स्कूल है निम्न तकनीक समाधान जो अच्छी तरह से काम करता है और दशकों से है।
जाहिर है कि आपके पास जितना अधिक संग्रहण I/O होगा उतना ही बेहतर होगा कि यह अंत में कॉनकैट पर प्रदर्शन करेगा।