किसे रैखिकता की आवश्यकता है?


13

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

क्या आप उन परिदृश्यों के साथ आ सकते हैं जहाँ ऐसी मजबूत संपत्ति वास्तव में आवश्यक होगी?


आप विकिपीडिया पर देख सकते हैं: en.wikipedia.org/wiki/… , या हेरलीहि और विंग द्वारा कागज पर: "रैखिकता: समवर्ती वस्तुओं के लिए एक शुद्धता स्थिति"।
एडुआर्डो बीज़र्रा

जवाबों:


5

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

इसके अलावा, रैखिककरण एक गैर-अवरोधक संपत्ति है: कुल ऑपरेशन (सभी ऑब्जेक्ट राज्यों के लिए परिभाषित) को ब्लॉक करने की आवश्यकता नहीं है। इसके बजाय, Serializability एक गैर-अवरुद्ध संपत्ति नहीं है। इसलिए, संगामिति की डिग्री बढ़ाने के लिए, समवर्ती डेटा संरचनाओं के डिजाइनर हमेशा रैखिकता पर भरोसा करते हैं।


1
यह एक अच्छा जवाब नहीं है, क्योंकि यह संदेह में अवधारणा को समझाने के लिए एक और अस्पष्टीकृत अवधारणा का उपयोग करता है .. (यह पढ़कर समय बर्बाद होता है) .. नीचे दिए गए उत्तर बहुत बेहतर हैं ...
रिचर्ड

लगता है कि आपने ओपी का मूल प्रश्न नहीं पढ़ा। ओपी यह नहीं पूछ रहा था कि रेखीयकरण क्या है, उन्होंने पूछा कि "रैखिकता की आवश्यकता किसे है"? मेरा उत्तर उपयुक्त है, क्योंकि यह ओपी को एक उदाहरण परिदृश्य प्रदान करता है (कम से कम, यह ओपी द्वारा उपयुक्त और चयनित माना गया था)। यह तथ्य कि आपको पता नहीं है कि समवर्ती, प्रतीक्षा-मुक्त डेटा संरचनाएं वास्तव में एक पूरी तरह से अलग मामला है। वैसे, ओपी जानता था कि मैं किस बारे में बात कर रहा हूं। अगर हमें किसी उत्तर में उपयोग की जाने वाली प्रत्येक अवधारणा को समझाना है, तो उत्तर कभी भी समाप्त नहीं होगा
;;

10

मैंने पिछले 15 वर्षों में कई बार हेरली और विंग को फिर से बनाया है। यह बहुत मुश्किल से पढ़ा गया है। और यह दुर्भाग्यपूर्ण है, क्योंकि जब किनारों के आसपास कुछ सूक्ष्मताएं होती हैं, तो मूल विचार वास्तव में काफी उचित होता है।

संक्षेप में: लीनियरिज़ेबिलिटी सीरीज़ेबिलिटी की तरह है, लेकिन अतिरिक्त आवश्यकता के साथ कि क्रमबद्धता लेनदेन के बीच अतिरिक्त ऑर्डरिंग बाधाओं का सम्मान करती है। लक्ष्य आपको एक बार में पूरे सिस्टम के बारे में तर्क करने के बजाय एक व्यक्तिगत परमाणु डेटा संरचना के बारे में कठोरता से तर्क करने की अनुमति देता है।

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

यहां वे परिभाषाएं हैं जिनका मैं उपयोग करूंगा:

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

Serializability विभिन्न लेनदेन के बीच संचालन के interleaving की उपस्थिति को अस्वीकार करता है, और इसके लिए आवश्यक है कि लेन-देन के चुने गए आदेश कार्यशीलता को संतुष्ट करता है (यदि लेन-देन ए मूल्य x लिखता है, और लेनदेन B मूल्य x को पढ़ता है जिसे A ने लिखा है, तो लेनदेन A पूर्ववर्ती लेनदेन बी है चुने गए सीरियल ऑर्डर।) लेकिन यह लेनदेन के आदेश पर किसी भी अन्य बाधाओं के बारे में कुछ नहीं कहता है (विशेष रूप से, यह प्रक्रियाओं के बारे में कुछ नहीं कहता है और जिस क्रम में घटनाओं का अनुभव होता है।)

एक अन्य संबंधित विचार है जो उस क्रम के बारे में बाधाओं में जोड़ता है जिसमें प्रक्रियाएं निष्पादित होती हैं (लेकिन लेनदेन केवल व्यक्तिगत पढ़ने / लिखने के संचालन के बारे में बात नहीं करता है):

एक प्रणाली क्रमिक रूप से सुसंगत है यदि किसी भी निष्पादन का परिणाम समान है जैसे कि सभी प्रक्रियाओं के संचालन को कुछ अनुक्रमिक क्रम में निष्पादित किया गया था, और प्रत्येक व्यक्तिगत प्रक्रिया के संचालन इस क्रम में उसके कार्यक्रम द्वारा निर्दिष्ट क्रम में दिखाई देते हैं। ( लैम्पपोर्ट, "कैसे एक मल्टीप्रोसेसर कंप्यूटर बनाने के लिए जो सही ढंग से मल्टीप्रोसेस प्रोग्राम निष्पादित करता है", IEEE T Comp 28: 9 (690-691), 1979 )।

अनुक्रमिक स्थिरता की परिभाषा में निहित यह है कि हम केवल अनुक्रमिक आदेशों को स्वीकार करते हैं जहां प्रत्येक मेमोरी लोकेशन (ऑब्जेक्ट) के लिए ऑपरेशन के प्रेरित अनुक्रमिक आदेश इस नियम का पालन करते हैं कि प्रत्येक रीड ऑपरेशन द्वारा स्थान पर लौटाए गए xमान का वही मान होना चाहिए जो लिखा गया था xअनुक्रम क्रम में स्थान के लिए तुरंत पूर्ववर्ती लेखन ऑपरेशन ।

रेखीयता के अच्छे इरादे हैं (ए) लेन-देन की धारणा को एक साथ जोड़ना (क्रमांकन से) इस धारणा के साथ कि प्रक्रियाएं उम्मीद करती हैं कि वे परिचालन क्रम में (क्रमिक स्थिरता से) जारी करने की अपेक्षा करें और (बी) प्रत्येक के बारे में बात करने के लिए शुद्धता मानदंड को सीमित करें एक पूरे के रूप में प्रणाली के बारे में कारण के लिए मजबूर करने के बजाय अलगाव में वस्तु। (मैं यह कहना चाहूंगा कि मेरी वस्तु का क्रियान्वयन एक ऐसी प्रणाली में भी सही है जहाँ ऐसी अन्य वस्तुएं हैं जो रैखिक नहीं हैं।) मेरा मानना ​​है कि हेरली और विंग शायद ही किसी मॉनीटर को सख्ती से परिभाषित करने की कोशिश कर रहे हों ।

भाग (ए) "आसान" है: अनुक्रमिक स्थिरता जैसी आवश्यकता यह होगी कि प्रत्येक प्रक्रिया द्वारा जारी किए गए ऑब्जेक्ट पर लेनदेन कार्यक्रम द्वारा निर्दिष्ट क्रम में परिणामी अनुक्रम में दिखाई दें। क्रमबद्धता जैसी आवश्यकता यह होगी कि वस्तु पर होने वाले लेन-देन सभी पारस्परिक रूप से अनन्य हों (क्रमबद्ध हो सकते हैं)।

जटिलता उद्देश्य से आती है (बी) (प्रत्येक वस्तु के बारे में स्वतंत्र रूप से सभी अन्य लोगों के बारे में बात करने में सक्षम)।

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

उदाहरण के लिए: मान लें कि मैं ऑब्जेक्ट A की शुद्धता के बारे में बहस करने की कोशिश कर रहा हूं, जो कि एक कतार है, मान लीजिए कि B एक मेमोरी लोकेशन है, और मान लीजिए कि मेरे पास निम्नलिखित निष्पादन हिस्ट्री हैं: थ्रेड 1: A.enqueue (x), A. dequeue () (रिटर्न y)। थ्रेड 2: ए.नेक्यू (वाई), एडेक्यू () (रिटर्न एक्स)। क्या घटनाओं की एक इंटरलेविंग है जो कतार के इस कार्यान्वयन को सही होने की अनुमति देगा? हाँ:

Thread 1                           Thread 2
A.enqueue(x)                       ...
...                                A.enqueue(y)
...                                A.dequeue() (returns x)
A.dequeue(y) (returns y)           ...

लेकिन अब क्या होगा अगर इतिहास ( ऑब्जेक्ट बी सहित ): बी मूल्य 0 से शुरू होता है। थ्रेड 1: एनेक्यू (एक्स), एडेक्यू () (रिटर्न वाई), बीराइट (1)। थ्रेड 2: B.read () (रिटर्न 1) A.queque (y), A.dequeue () (रिटर्न x)।

Thread 1                           Thread 2
A.enqueue(x)                       ...
A.dequeue() (returns y)            ...                       (uh oh!)
B.write(1)                         ...
...                                B.read() (returns 1)
...                                A.enqueue(y)
...                                A.dequeue() (returns x)

अब हम "शुद्धता" की अपनी परिभाषा को यह कहना चाहेंगे कि यह इतिहास बताता है कि या तो A का हमारा कार्यान्वयन छोटी गाड़ी है या B का हमारा कार्यान्वयन छोटी गाड़ी है, क्योंकि कोई क्रमांकन नहीं है जो "समझ में आता है" (या तो थ्रेड 2 को पढ़ने की आवश्यकता है B से एक मान जो अभी तक नहीं लिखा गया है, या थ्रेड 1 को A से एक मान को हटाने की आवश्यकता है जो अभी तक संलग्न नहीं है।) तो जबकि A पर लेन-देन का हमारा मूल क्रमबद्धता एक उचित लगता था, यदि हमारा कार्यान्वयन। दूसरे की तरह एक इतिहास की अनुमति देता है, तो यह स्पष्ट रूप से गलत है।

तो यह है कि रैखिककरण कहते हैं कि बाधाएं FIFO कतारों की तरह सरल डेटा संरचनाओं के लिए भी उचित (और आवश्यक हैं।) वे कुछ इस तरह हैं: "आपके कार्यान्वयन को एक बार में कुछ समय तक समाप्त नहीं किया जाना चाहिए () मूल्य को समाप्त करना चाहिए। भविष्य। " प्राप्त करने के लिए रेखीयता काफी आसान (और प्राकृतिक) है: बस अपनी वस्तु के साथ एक म्यूटेक्स संबद्ध करें, और प्रत्येक लेनदेन लॉकिंग द्वारा शुरू होता है और अनलॉक करके समाप्त होता है। जब आप साधारण म्यूटेक्स के बजाय गैर-अवरोधक या लॉक-फ्री या प्रतीक्षा-मुक्त तकनीकों के साथ अपनी परमाणुता को लागू करने की कोशिश कर रहे हैं, तो रैखिकता के बारे में तर्क मुश्किल होने लगते हैं।

यदि आप साहित्य के कुछ बिंदुओं में रुचि रखते हैं, तो मैंने निम्नलिखित पाया है (हालांकि मुझे लगता है कि "वास्तविक समय" के बारे में चर्चा लाल-झुंडों में से एक है जो रैखिकता को अधिक कठिन बनाती है, जितना कि इसके लिए आवश्यक है।) https: // stackoverflow.com/questions/4179587/difference-between-linearizability-and-serializability


आप दावा करते हैं कि `` मेरा मानना ​​है कि हेरली और विंग शायद ही किसी मॉनिटर को सख्ती से परिभाषित करने की कोशिश कर रहे हों। क्या आप कुछ विवरण जोड़ सकते हैं। (मैं
हर्लीहि

1
मुझे नहीं लगता कि मेरा मतलब कुछ भी गहरा था। इससे पहले कि मैं हर्लिहि और विंग को पढ़ता, मैंने मॉनिटर के बारे में जो कुछ पढ़ा था, वे सभी चालू थे। की तरह कुछ "एक मॉनिटर एक सार डेटा प्रकार परोक्ष एक म्युटेक्स और प्रकार की हर विधि है कि शुरुआत और अंत में रिलीज म्युटेक्स, पर म्युटेक्स प्राप्त कर लेता है" जब यह ठीक है के बारे में एक जटिल चर्चा के बाद wait()और notify()। Linearizability अधिक जटिल / अनुकूलित मॉनिटर कार्यान्वयन की शुद्धता के बारे में बात करने का एक तरीका देता है।
भटकना तर्क

यह मुझे समझ में आता है। धन्यवाद। आज मैंने Related Workहर्लही और विंग के पेपर का हिस्सा पढ़ा है । उन्होंने monitorअपने दावे के उदाहरण के रूप में उल्लेख किया है Our notion of linearizability generalizes and unifies similar notions found in specific examples in the literature। हालाँकि एक सामान्य प्रश्न: क्या मल्टीप्रोसेसर सिस्टम (जैसे, हार्डवेयर, कंपाइलर, प्रोग्रामिंग लैंग्वेज और समवर्ती डेटा स्ट्रक्चर्स) में रैखिकता की धारणा को व्यापक रूप से अपनाया गया है? (संक्षिप्त होने के कारण, मैं केवल मॉनिटर जैसी चीजों को जानता हूं।) यदि नहीं, तो क्या बाधाएं हैं? कला की स्थिति क्या है?
hengxin

मुझे लगता है कि इसे एक वांछनीय संपत्ति माना जाता है जो कभी-कभी लागू करने के लिए बहुत महंगा है। उदाहरण के लिए देखें: courses.csail.mit.edu/6.852/01/papers/p91-attiya.pdf । इसके अलावा व्यवहारिक रूप से मुझे लगता है कि ज्यादातर समवर्ती हैशमैप में प्रति बाल्टी एक लॉक होता है, लेकिन कोई वैश्विक लॉक नहीं होता है, और इस तरह किसी भी समय अजीब व्यवहार हो सकता है क्योंकि प्रविष्टि को हटाने के लिए हैश तालिका को हटा दिया जाता है।
भटकना तर्क

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

2

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

obj। संचालन परमाणु हैं | लेन-देन परमाणु हैं
-------------------------------- + ----------------- ----------------
रेखीयता |
अनुक्रमिक संगति | serializability
कारण संगति |
कैश संगति |

रेखीयता की आवश्यकता होती है कि समवर्ती सेटिंग में वस्तुओं की एक प्रणाली एक अनुक्रमिक प्रणाली के समान व्यवहार करती है जो एक समय में एक ऑपरेशन (एक अनुरोध / प्रतिक्रिया जोड़ी) को संभालती है - एक समानांतर ब्रह्मांड में - इस तरह से कि (ए) क्लाइंट दोनों ब्रह्माण्डों में समान प्रतिक्रियाएँ (b) लौकिक क्रम संरक्षित है (नीचे इस पर और अधिक)।

अनुक्रमिक संगतता की तरह, सीरियलिबिलिटी की परिभाषा, केवल पहली कसौटी की आवश्यकता है।

टेम्पोरल ऑर्डर संरक्षण का मतलब यह है: यदि A: x.op1 () (A एक क्लाइंट है, x एक ऑब्जेक्ट है, और op1 एक ऑपरेशन है) दूसरे ऑपरेशन B: y.op2 () शुरू होने से पहले समाप्त हो गया, तो अनुक्रमिक ब्रह्मांड में अनुरोधों को उसी क्रम में नियंत्रित किया जाता है। यह अनुक्रमिक संगति (एससी) में आवश्यक नहीं है; ऑब्जेक्ट को क्लाइंट के अनुरोध को कतारबद्ध करने, क्लाइंट को जवाब देने, फिर बाद में मूल्यांकन करने की अनुमति है। इसके अलावा, ऑब्जेक्ट पहले से मिलने से पहले इसका मूल्यांकन करते हुए, किसी अन्य ग्राहक से बाद के अनुरोध को संभाल सकता है।

लौकिक व्यवस्था का गैर-संरक्षण एक समस्या है। A: x.op1 () के बाद, मान लीजिए कि A ने फोन उठाया और B को इसके बारे में बताया, तो B ने x.op2 () कॉल को कॉल किया। सिस्टम के लिए घटनाओं के इस कारण श्रृंखला के बारे में जानने का कोई तरीका नहीं है, क्योंकि दूसरे चरण में सिस्टम द्वारा ट्रैक नहीं किया गया संदेश शामिल है। कई वास्तविक मामलों में, ए के लिए यह मानना ​​अनुचित नहीं है कि एक बार एक्स ने जवाब दिया था, बी का आह्वान अद्यतन स्थिति पर भरोसा कर सकता है। यदि अस्थायी आदेश संरक्षित नहीं किया गया था, तो ए और बी एक आश्चर्य के लिए हैं। यह एक रैखिक प्रणाली में नहीं होगा।

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

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