कैसे जावा में सबसे अच्छा समवर्ती हैश नक्शा लागू करने के लिए?



यह लेख आपको जावा में समवर्ती हैश मैप नामक एक अवधारणा से परिचित कराएगा और एक व्यावहारिक प्रदर्शन के साथ इसका पालन करेगा

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

जावा में समवर्ती हैश मैप पर इस लेख के साथ आगे बढ़ना





सॉर्ट लिस्ट c ++

कैसे आंतरिक रूप से काम करता है?

Java 5 के बाद से ConcurrentHashMap को HashTable के विकल्प के रूप में पेश किया गया है। हम यूटिलिटी क्लास विधि का उपयोग करके एक सिंक्रोनाइज़्ड मैप भी प्राप्त कर सकते हैं जिसे सिंक्रोनाज़ () कहा जाता है, लेकिन इस पद्धति की एक खामी है यानी बहुत खराब प्रदर्शन क्योंकि एक बार में केवल एक ही धागा इसे एक्सेस कर सकता है। इसलिए समवर्ती हाशप इन मुद्दों को संबोधित करता है।



जावा में समवर्ती हैश मैप पर इस लेख के साथ आगे बढ़ना

अन्य मानचित्र क्यों?

हालांकि हमारे पास पहले से ही HashMap, HashTable है फिर भी ConcurrentHashMap की क्या आवश्यकता है, यह इसलिए है क्योंकि यह थ्रेड-सुरक्षित है उसी समय बेहतर प्रदर्शन प्रदान करता है।

जावा में समवर्ती हैश मैप पर इस लेख के साथ आगे बढ़ना



यह अलग कैसे है?

यह भी हैशिंग पर आधारित है, लेकिन इसकी लॉकिंग रणनीति से इसका प्रदर्शन बेहतर होता है। हैशटेबल या सिंक्रोनाइज़्ड हाशप के विपरीत यह प्रत्येक विधि पर एक ही लॉक को लागू नहीं करता है, यह प्रत्येक विधि के लिए एक अलग लॉक का उपयोग करता है, यह इस उद्देश्य के लिए री-एंट्रेंट लॉक का उपयोग करता है। HashMap के समान, ConcurrentHashMap के पास 16 बाल्टियाँ हैं यानी खंड हैं, जो समवर्तीHashMap बनाने के लिए 16 से अधिक बाल्टियों के साथ इसके अलग-अलग निर्माता हैं।

विस्तार से बात करने से पहले हम नीचे कुछ अवधारणाओं की समीक्षा करें:

समवर्ती हाशिए: यह मानचित्र समवर्ती धागे का उपयोग करने की अनुमति देता है। नक्शे का केवल एक भाग जिसे खंड कहा जाता है अर्थात् अंतर्निहित डेटा संरचना मानचित्र को जोड़ने या अपडेट करते समय लॉक हो रही है। यह समवर्ती थ्रेड एक्सेस को लॉक किए बिना डेटा को पढ़ने की अनुमति देता है। इसे प्रदर्शन में सुधार के लिए पेश किया गया था।

  • Concurrency-Level: यह एक संख्या है जो समवर्ती अपडेट थ्रेड्स की अनुमानित संख्या है।
  • लोड-फैक्टर: यह एक मूल्य है जिसका उपयोग आकार बदलने वाले कारक को नियंत्रित करने के लिए किया जाता है।
  • प्रारंभिक क्षमता: यह एक संपत्ति है जो प्रदान किए गए आकार के साथ एक मानचित्र बनाता है।

आइए नीचे आरेख देखें और समझने की कोशिश करें कि समवर्ती हाशिए कैसे काम करता है।

चित्र- समवर्ती हशमप- एडुरका

इसलिए उपरोक्त आरेख में, हमारे पास 16 ताले हैं जो केवल नक्शे के एक हिस्से को लॉक करते हैं जो आवश्यक है ताकि अन्य तरीकों को विभिन्न थ्रेड्स द्वारा एक्सेस किया जा सके ताकि इस प्रकार प्रदर्शन में सुधार हो सके।

HashMap की तरह, ConcurrentHashMap एक समान तरीके से काम करता है, जिसमें डिफ़ॉल्ट रूप से 16 खंड होते हैं और हैशिंग द्वारा तत्व संग्रहीत करता है, इसलिए यदि तत्वों में समान हैश है, तो वे उसी खंड पर संग्रहीत होते हैं, जैसा कि ऊपर दिए गए आरेख में दिखाया गया है।

जावा में समवर्ती हैश मैप पर इस लेख के साथ आगे बढ़ना

समवर्ती हाशप और हाशप के बीच अंतर

हैशपॉप का संबंध संग्रह से है जबकि समवर्ती हाशपा का संबंध समवर्ती संग्रहों से है हालांकि उनके बीच कई अन्य अंतर हैं।

  • समवर्ती HashMap हैधागा-सुरक्षित यानीसमन्‍वयित लेकिन HashMap गैर-समन्‍वयित है।
  • समवर्ती हाशिए प्रदर्शन पर कम है क्योंकि यह सिंक्रनाइज़ है क्योंकि कभी-कभी थ्रेड्स का इंतजार करना पड़ता है लेकिन हैशपॉप प्रदर्शन पर अधिक है क्योंकि यह गैर-सिंक्रनाइज़ है और कोई भी थ्रेड इसे एक साथ एक्सेस कर सकता है।
  • यदि दो थ्रेड एक साथ ऑब्जेक्ट की सामग्री को संशोधित करने या जोड़ने की कोशिश कर रहे हैं, तो हम समवर्तीमॉडिफिकेशन अपवाद प्राप्त करेंगे। हालांकि, समवर्ती हाशपा के मामले में हमने एक ही ऑपरेशन करते समय कोई अपवाद नहीं पाया।

  • HashMap में कुंजी और मान के लिए अशक्त मानों की अनुमति है, लेकिन ConcurrentHashMap कुंजी और मान के लिए अशक्त मानों की अनुमति नहीं देता है यह शून्य मान जोड़ने की कोशिश करता है हमें अपवाद मिलेगा अर्थात् NullPointerException।

  • HashMap JDK 1.2 में पेश किया गया है जबकि ConcurrentHashMap JDK 1.5 में पेश किया गया है।

जैसा कि हमने पहले बेहतर प्रदर्शन के लिए देखा है, इसमें तालिका बाल्टियों के रूप में नोड्स की एक सरणी होती है जो तालिका सेगमेंट से पहले की थी जावा 8

जब पहली प्रविष्टि की जाती है तो बाल्टियाँ आलसी रूप से आरंभिक होती हैं। हर बाल्टी को स्वतंत्र रूप से लॉक किया जा सकता है बाल्टी के पहले नोड को लॉक करके भी पढ़ें ऑपरेशन ब्लॉक नहीं होते हैं।

की तुलना में HashMap, समवर्ती HashMap अतिरिक्त प्रदान करता है संक्षिप्त नाम तर्क का उपयोग करने के लिए अनुमानित धागे की संख्या को नियंत्रित करने के लिए।

निर्माता:

  1. समवर्ती हाशपा m = नया समवर्ती हाशपा ()

    एक नया खाली नक्शा 16 की डिफ़ॉल्ट प्रारंभिक क्षमता, 0.75 के लोड फैक्टर और समवर्ती स्तर 16 के साथ बनाया गया है।

  2. ConcurrentHashMap m = नया समवर्ती
    एक नया खाली नक्शा एक निर्दिष्ट प्रारंभिक क्षमता, 0.75 के लोड फैक्टर और समवर्ती स्तर 16 के साथ बनाया गया है।

  3. समवर्ती हाशपा m = नया समवर्ती हाशपा (इंट प्रारंभिक प्रारंभिक, फ्लोट लोडफैक्टर)

    एक नया खाली नक्शा एक निर्दिष्ट प्रारंभिक क्षमता और समसामयिक स्तर 16 के साथ लोड कारक के साथ बनाया गया है।

  4. ConcurrentHashMap m = नया ConcurrentHashMap (int आरंभिक क्षमता, फ़्लोट लोडफ़ैक्टर, int समरूपता)
    एक नया खाली नक्शा एक निर्दिष्ट प्रारंभिक क्षमता, लोड कारक और संगामिति स्तर के साथ बनाया गया है।

  5. समवर्ती हाशपा m = नया समवर्ती हाशम (मानचित्र m)
    प्रदान किए गए नक्शे से नए समवर्ती हाशिए बनाता है।

अन्य दो तर्क: आरंभिक क्षमता और लोडफ़ैक्टर ने हाशप के समान ही काम किया।
समवर्ती मानचित्र बहु-थ्रेडेड वातावरण में कुंजी / मान संचालन पर स्मृति के अनुरूप है।

जावा में समवर्ती हैश मैप पर इस लेख के साथ आगे बढ़ना

नुकसान

ऑब्जेक्ट्स को पुनर्प्राप्त करते समय ConcurrentHashMap अवरुद्ध नहीं होता है और वे अपडेट ऑपरेशंस के साथ ओवरलैप कर सकते हैं, इस प्रकार बेहतर प्रदर्शन के लिए वे केवल हाल ही में पूर्ण किए गए ऑपरेशन को पुनः प्राप्त करते हैं।

आकार, सम्‍मिलित, और सम्‍मिलित सहित कुल स्थिति विधियों के परिणाम आम तौर पर तभी उपयोगी होते हैं जब कोई मानचित्र अन्‍य थ्रेड्स में समवर्ती अद्यतनों से गुजर रहा हो।

यदि समवर्ती अपडेट को ठीक से नियंत्रित किया जाता है तो ये स्थिति विधियां विश्वसनीय हो सकती हैं।

हालांकि ये तरीके वास्तविक समय में गारंटी नहीं देते हैं।

डिफ़ॉल्ट तालिका क्षमता 16 है, लेकिन हम इसे संगामिति स्तर का उपयोग करके बदल सकते हैं।

Public ConcurrentHashMap (int initialCapacity, फ्लोट लोडफ़ैक्टर, int concurrencyLevel) {// ... if (initialCapacity

यदि कुंजियों की कुंजियों को क्रमबद्ध क्रम में होना आवश्यक है, तो हम समवर्तीSkipListMap का उपयोग कर सकते हैं।

अब उपरोक्त कार्यक्रम को निष्पादित करने के बाद आप जावा में समवर्ती हैश मैप को समझ गए होंगे। इस प्रकार हम इस लेख के अंत में आए हैं, यदि आप और अधिक सीखना चाहते हैं, तो देखें एक विश्वसनीय ऑनलाइन शिक्षण कंपनी। एडुर्का के जावा जे 2 ईई और एसओए प्रशिक्षण और प्रमाणन पाठ्यक्रम आपको हाइबरनेट और स्प्रिंग जैसे विभिन्न जावा फ्रेमवर्क के साथ कोर और उन्नत जावा अवधारणाओं दोनों के लिए प्रशिक्षित करने के लिए डिज़ाइन किया गया है।

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया इस लेख के टिप्पणी अनुभाग में इसका उल्लेख करें और हम जल्द से जल्द आपके पास वापस आ जाएंगे।