एक समवर्तीSkipListSet कब उपयोगी है?


84

मैंने अभी इस डेटा-संरचना को जावा 6 एपीआई पर देखा था और मुझे इस बात की उत्सुकता है कि यह एक उपयोगी संसाधन कब होगा। मैं scjp परीक्षा के लिए अध्ययन कर रहा हूं और मैं इसे कैथी सिएरा की पुस्तक पर कवर नहीं करता, भले ही मैंने नकली परीक्षा प्रश्न देखे हों जो इसका उल्लेख करते हैं।

जवाबों:


175

जब आप कई थ्रेड्स द्वारा एक्सेस किया जाएगा एक सॉर्ट किए गए कंटेनर की आवश्यकता होती है, तो ConcurrentSkipListSet और ConcurrentSkipListMap उपयोगी होते हैं। ये अनिवार्य रूप से समवर्ती कोड के लिए ट्रीपैप और ट्रीसेट के समकक्ष हैं।

JDK 6 के लिए कार्यान्वयन आईबीएम में मेज़्ड माइकल द्वारा उच्च प्रदर्शन डायनामिक लॉक-फ्री हैश टेबल्स और सूची-आधारित सेटों पर आधारित है , जो दर्शाता है कि आप तुलनात्मक रूप से तुलना और स्वैप (CAS) संचालन का उपयोग करते हुए स्किप सूचियों पर बहुत से कार्यों को कार्यान्वित कर सकते हैं । ये लॉक-फ़्री हैं, इसलिए synchronizedजब आप इन कक्षाओं का उपयोग करते हैं, तो आपको (अधिकांश कार्यों के लिए) ओवरहेड के बारे में चिंता करने की ज़रूरत नहीं है ।

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

मैं मान रहा हूं कि जेडीके के लोग यहां एक स्किप लिस्ट के साथ गए थे क्योंकि कार्यान्वयन अच्छी तरह से जाना जाता था और क्योंकि इसे लॉक-फ्री बनाना सरल और पोर्टेबल था (कैस का उपयोग करके)। अगर किसी को स्पष्ट करने की परवाह है, तो कृपया करें। मैं उत्सुक हूँ।


1
यदि आप एक बहु-थ्रेड वातावरण में अद्वितीय रिकॉर्ड का ट्रैक करना चाहते हैं, तो यह उपयोगी है।
एनाटिक्लस

4

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

वैसे भी, जब आपको समवर्ती, सॉर्ट किए गए और कुशल सेट की आवश्यकता होती है, तो आप ConcurrentSkipListSet का उपयोग कर सकते हैं


2

ये तब उपयोगी होते हैं जब आपको एक ऐसे सेट की आवश्यकता होती है जिसे एक साथ कई थ्रेड द्वारा सुरक्षित रूप से एक्सेस किया जा सके। यह कमजोर रूप से सुसंगत होने से भी अच्छा प्रदर्शन प्रदान करता है - जब आप सेट के माध्यम से पुनरावृत्ति कर रहे हैं तो आवेषण को सुरक्षित रूप से बनाया जा सकता है, लेकिन इस बात की कोई गारंटी नहीं है कि आपका Iterator उस प्रविष्टि को देखेगा।


1

जब मैं घर में रहने वाले कैश के लिए एक प्रतिकृति परत को लागू करने की आवश्यकता होती है, तो कॉनकंटर्स्लिपस्टिस्ट एक शानदार खोज थी। मानचित्र पहलुओं ने कैश को लागू किया, और अंतर्निहित सूची पहलुओं ने मुझे उस क्रम का ट्रैक रखने दिया जिसमें ऑब्जेक्ट कैश में दिखाई दिए। उस सूची के "छोड़ें" पहलू ने सूची में एक स्थान से किसी वस्तु को निकालने के लिए इसे कुशल बना दिया और इसे अंत में टकरा दिया जब इसे कैश में बदल दिया गया था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.