लाइवलॉक: क्या है, उदाहरण, डेडलॉक से अंतर

⚡ स्मार्ट सारांश

लाइवलॉक एक ऐसी समवर्ती स्थिति है जहां प्रक्रियाएं एक-दूसरे के जवाब में अपनी स्थिति बदलती रहती हैं, लेकिन कोई वास्तविक प्रगति नहीं करती हैं, सक्रिय रहती हैं और अपने कार्यों को पूरा किए बिना या अवरुद्ध हुए बिना सीपीयू चक्रों का उपभोग करती रहती हैं।

  • 🔁 परिभाषा: लाइवलॉक तब होता है जब प्रक्रियाएं एक-दूसरे को समायोजित करने के लिए लगातार अपनी स्थिति बदलती रहती हैं लेकिन कभी आगे नहीं बढ़तीं, जबकि डेडलॉक में रुकी हुई प्रक्रियाएं इसके विपरीत होती हैं।
  • 🚶 उदाहरण: दो लोग कदम बढ़ाते हैंping गलियारे में एक-दूसरे को रास्ता देने के लिए अगल-बगल खड़े रहना लाइवलॉक का उदाहरण है, जो लगातार चलते रहने के बावजूद कभी भी एक-दूसरे को पार नहीं करता है।
  • 🧮 कारण: सीमित प्रोसेस-टेबल स्लॉट द्वारा सीमित लॉक के लिए बार-बार पोलिंग और पुनः प्रयास करने से प्रोसेस बिना किसी के अवरुद्ध हुए लाइवलॉक में चले जाते हैं।
  • ️ तुलना: डेडलॉक प्रक्रियाओं को रोक देता है, स्टार्वेशन अनिश्चित काल तक संसाधनों से वंचित कर देता है, और लाइवलॉक प्रक्रियाओं को बिना किसी प्रगति के व्यस्त रखता है।
  • ️ रोकथाम: रैंडमाइज्ड बैकऑफ, रिट्राई लिमिट और प्रायोरिटी ऑर्डरिंग, लाइवलॉक बनाने वाले सिमेट्रिक रिट्राई को तोड़ देते हैं।
  • 🤖 एआई का दृष्टिकोण: मशीन लर्निंग प्रगति न करने वाले सीपीयू पैटर्न को चिह्नित करती है, और कोपायलट बैकऑफ़ और लॉक-ऑर्डरिंग कोड लिखने में मदद करता है जो लाइवलॉक से बचाता है।

लाइवलॉक में Operaटिंग सिस्टम

लाइवलॉक क्या है?

A livelock यह एक ऐसी स्थिति है जहां एक्सक्लूसिव लॉक के लिए अनुरोध बार-बार अस्वीकार कर दिया जाता है, क्योंकि कई ओवरलैप होते हैं।ping साझा लॉक एक दूसरे के काम में बाधा डालते रहते हैं। प्रक्रियाएं लगातार अपनी स्थिति बदलती रहती हैं, जिससे वे कार्य पूरा करने में असमर्थ हो जाती हैं।

लाइवलॉक के उदाहरण

उदाहरण 1:

लिवेलॉक का सबसे सरल उदाहरण दो व्यक्तियों का है जो एक गलियारे में आमने-सामने मिलते हैं और एक-दूसरे को रास्ता देने के लिए एक तरफ हट जाते हैं। वे एक ही दिशा में एक ही समय पर चलने के कारण बिना आगे बढ़े लगातार इधर-उधर हिलते रहते हैं। यहाँ, वे कभी एक-दूसरे को पार नहीं करते।

उदाहरण 2:

लाइवलॉक के उदाहरण Operaटिंग सिस्टम

ऊपर दिए गए चित्र में, दोनों प्रक्रियाओं को दो-दो संसाधनों की आवश्यकता होती है, और वे आवश्यक लॉक प्राप्त करने के लिए प्रिमिटिव पोलिंग का उपयोग करते हैं। यदि कोई प्रयास विफल हो जाता है, तो विधि पुनः प्रयास करती है।

  1. प्रक्रिया A के पास संसाधन Y है
  2. प्रक्रिया B संसाधन X रखती है
  3. प्रक्रिया A के लिए संसाधन X की आवश्यकता है
  4. प्रक्रिया B के लिए संसाधन Y की आवश्यकता है

मान लीजिए कि प्रक्रिया A पहले चलती है और संसाधन X प्राप्त करती है, और फिर प्रक्रिया B चलती है और संसाधन Y प्राप्त करती है। चाहे कोई भी प्रक्रिया पहले चले, उनमें से कोई भी आगे प्रगति नहीं करती है।

हालांकि, इन दोनों प्रक्रियाओं में से कोई भी अवरुद्ध नहीं है। वे बिना कोई प्रगति किए बार-बार सीपीयू संसाधनों का उपयोग करती हैं, फिर भी वे प्रोसेसिंग ब्लॉक के लिए कभी नहीं रुकतीं।

इसलिए, यह स्थिति ऐसी नहीं है गतिरोधक्योंकि एक भी प्रक्रिया अवरुद्ध नहीं है; इसके बजाय, हम गतिरोध के समतुल्य स्थिति का सामना कर रहे हैं, जिसे लाइवलॉक कहा जाता है।

लाइवलॉक का कारण क्या है?

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

गतिरोध (डेडलॉक) क्या है?

A गतिरोध डेडलॉक एक ऐसी स्थिति है जो ऑपरेटिंग सिस्टम में तब उत्पन्न होती है जब कोई प्रक्रिया प्रतीक्षा अवस्था में चली जाती है क्योंकि कोई अन्य प्रतीक्षारत प्रक्रिया आवश्यक संसाधन को रोके रखती है। डेडलॉक मल्टीप्रोसेसिंग में एक आम समस्या है, जहां कई प्रक्रियाएं एक विशिष्ट प्रकार के परस्पर अनन्य संसाधन को साझा करती हैं, जिसे सॉफ्ट लॉक या सॉफ्टवेयर लॉक के रूप में जाना जाता है।

गतिरोध का उदाहरण

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

गतिरोध का उदाहरण Operaटिंग सिस्टम

गतिरोध का उदाहरण

भुखमरी क्या है?

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

कुछ एल्गोरिदम के साथ, कुछ प्रक्रियाओं को वांछित सेवा नहीं मिल पाती है, भले ही वे डेडलॉक में न हों। स्टार्वेशन तब होता है जब कुछ थ्रेड्स लंबे समय तक साझा संसाधनों को अनुपलब्ध कर देते हैं।

भुखमरी का उदाहरण

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

डेडलॉक, स्टार्वेशन और लाइवलॉक के बीच अंतर

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

अक्सर पूछे जाने वाले प्रश्न

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

नहीं। लाइवलॉक्ड प्रोसेस कभी ब्लॉक नहीं होते — वे लगातार चलते रहते हैं और बिना कोई प्रगति किए लगातार रिट्राई करके CPU साइकल का उपयोग करते रहते हैं। डेडलॉक की स्थिति में, शामिल प्रोसेस रुक जाते हैं और प्रतीक्षा करते हैं, इसलिए वे CPU का उपयोग नहीं करते।

अक्सर हां। डेडलॉक प्रक्रियाएँ रुकी रहती हैं, जिसे पहचानना आसान होता है, जबकि लाइवलॉक प्रक्रियाएँ सक्रिय रहती हैं और अपनी स्थिति बदलती रहती हैं। आमतौर पर, समय के साथ प्रगति न होने के साथ-साथ उच्च CPU उपयोग को देखकर इसका पता लगाया जाता है।

रेस कंडीशन साझा डेटा तक असिंक्रनाइज़्ड एक्सेस के कारण उत्पन्न होने वाला एक गलत या अप्रत्याशित परिणाम है। इसके विपरीत, लाइवलॉक में ऐसी प्रक्रियाएं शामिल होती हैं जो सक्रिय रहती हैं और अपना काम पूरा किए बिना एक-दूसरे के जवाब में अपनी स्थिति बदलती रहती हैं।

जी हां। ऐसे थ्रेड जो बार-बार एक-दूसरे पर प्रतिक्रिया करते हैं — उदाहरण के लिए, एक ही समय में लॉक को रिलीज़ करना और फिर से अनुरोध करना — बिना ब्लॉक हुए लाइवलॉक कर सकते हैं। यह अक्सर रिट्राई और बैकऑफ़ लॉजिक में दिखाई देता है जिसमें रैंडमनेस की कमी होती है।

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

जी हां। GitHub Copilot रैंडम बैकऑफ़, टाइमआउट और सुसंगत लॉक-ऑर्डरिंग पैटर्न सुझा सकता है जो लाइवलॉक और डेडलॉक दोनों के जोखिम को कम करते हैं। डेवलपर्स को फिर भी जेनरेट किए गए कॉन्करेंसी लॉजिक की सावधानीपूर्वक समीक्षा करनी चाहिए, क्योंकि समय से संबंधित सूक्ष्म त्रुटियों को नज़रअंदाज़ करना आसान होता है।

कभी-कभी। यदि समय में बदलाव होता है — उदाहरण के लिए, अनियमित पुनः प्रयास अंतराल के कारण — तो प्रक्रियाएँ पैटर्न को तोड़कर जारी रह सकती हैं। ऐसे बदलावों के बिना, लाइवलॉक अनिश्चित काल तक बना रह सकता है, जिससे सीपीयू का दुरुपयोग होता है जबकि कोई भी प्रक्रिया अपना कार्य पूरा नहीं कर पाती।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: