अनंत लूप

कंप्यूटर प्रोग्रामिंग में, एक अनंत लूप (या अंतहीन लूप) निर्देशों का एक क्रम है, जो लिखित रूप में, अंतहीन रूप से जारी रहेगा, जब तक कि कोई बाहरी हस्तक्षेप नहीं होता (प्लग खींचो) है। यह इच्छानुरूप हो सकता है।

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

इसके विपरीत, निम्न लूप अपने आप समाप्त नहीं होगा: बर्ड्स वैकल्पिक रूप से 1 या 2 होंगे, जबकि फिश वैकल्पिक रूप से 2 या 1 होगी। लूप तब तक नहीं रुकेगा जब तक कि कोई बाहरी हस्तक्षेप नहीं होता (प्लग को खींचें)।

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

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

जानबूझकर लूपिंग
ऐसी कुछ स्थितियाँ होती हैं जब यह वांछित व्यवहार होता है। उदाहरण के लिए, कार्ट्रिज-आधारित गेम कंसोल पर आमतौर पर उनके मुख्य लूप में कोई निकास स्थिति नहीं होती है, क्योंकि कंसोल के बंद होने तक प्रोग्राम के लूप से बाहर निकलने के लिए कोई ऑपरेटिंग सिस्टम नहीं होता है।

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

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

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

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

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

जबकि कोड के गहन निरीक्षण से अधिकांश अनंत लूप पाए जा सकते हैं, यह निर्धारित करने के लिए कोई सामान्य तरीका नहीं है कि क्या दिया गया प्रोग्राम कभी रुकेगा या हमेशा के लिए चलेगा; यह हॉल्टिंग समस्या की अनिश्चितता है।

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

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

कुछ भाषाओं में अनंत लूप के लिए विशेष रूप से एक अनिश्चित लूप से शर्त को हटाकर विशेष निर्माण होते हैं। उदाहरणों में एडा, फोरट्रान , गो , रूबी , और रस्ट शामिल हैं।

जानबूझकर अनंत छोरों के उदाहरण
एक साधारण उदाहरण (सी (प्रोग्रामिंग भाषा) में):

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

यह एक लूप है जो अनंत लूप को बिना रुके प्रिंट करेगा।

1980 के दशक की बेसिक प्रोग्रामिंग भाषा में एक समान उदाहरण: डॉस बैच फ़ाइलों में एक समान उदाहरण: यहां लूप काफी स्पष्ट है, क्योंकि अंतिम पंक्ति बिना शर्त निष्पादन को पहले वाले को वापस भेजती है।

जावा (प्रोग्रामिंग भाषा) में एक उदाहरण बोर्न अगेन शैल में एक उदाहरण रस्ट (प्रोग्रामिंग भाषा) में एक उदाहरण

गणितीय त्रुटियाँ
यहाँ Visual Basic में अनंत लूप का एक उदाहरण दिया गया है: यह एक ऐसी स्थिति बनाता है जहां   कभी भी 5 से अधिक नहीं होगा क्योंकि लूप कोड की शुरुआत में   कों 1 का मान दिया जाता है, इस प्रकार, लूप हमेशा 2 में समाप्त होगा और लूप कभी नहीं टूटेगा। इसे    निर्देश को लूप के बाहर ले जाकर ठीक किया जा सकता है। अनिवार्य रूप से यह अनंत लूप क्या करता है एक कंप्यूटर को 5 तक पहुंचने तक 1 से 1 जोड़ने के लिए निर्देश देना है। चूंकि 1+1 हमेशा 2 के बराबर होता है, ऐसा कभी नहीं होगा।

कुछ भाषाओं में, गणितीय प्रतीकों के बारे में प्रोग्रामर का भ्रम अनजाने में अनंत लूप का कारण बन सकता है। उदाहरण के लिए, यहाँ C (प्रोग्रामिंग भाषा) में एक स्निपेट है: अपेक्षित आउटपुट 0 से 9 तक की संख्या है, जिसमें एक इंटरजेक्टेड "a बराबर 5!" 5 और 6 के बीच है। हालांकि, लाइन में ऊपर, प्रोग्रामर ने = (असाइनमेंट) ऑपरेटर को == (समानता परीक्षण) ऑपरेटर के साथ भ्रमित कर दिया है। यह प्रोग्राम में   बिंदु पर 5 का मान असाइन करेगा। इस प्रकार,   कभी भी 10 तक आगे बढ़ने में सक्षम नहीं होगा, और यह लूप समाप्त नहीं हो सकता।

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

पायथन (प्रोग्रामिंग भाषा) में भी ऐसा ही हो सकता है: asasasasas समानता या गैर-समानता के परीक्षणों की अप्रत्याशित रूप से विफल होने की संभावना के कारण, फ़्लोटिंग-पॉइंट मानों से निपटने के दौरान परीक्षण से अधिक या कम से अधिक का उपयोग करना सुरक्षित है। उदाहरण के लिए, परीक्षण के बजाय कि क्या  1.1 के बराबर है, कोई परीक्षण कर सकता है कि क्या , या  , जिनमें से कोई भी निश्चित संख्या में पुनरावृत्तियों के बाद बाहर निकलना निश्चित होगा। इस विशेष उदाहरण को ठीक करने का एक अन्य तरीका एक पूर्णांक (कंप्यूटर विज्ञान) को एक नियंत्रण प्रवाह के रूप में उपयोग करना होगा, जो किए गए पुनरावृत्तियों की संख्या की गणना करता है।

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

मल्टी-पार्टी लूप
एक अनंत लूप कई संस्थाओं के परस्पर क्रिया के कारण हो सकता है। एक सर्वर पर विचार करें जो हमेशा एक त्रुटि संदेश के साथ उत्तर देता है यदि वह अनुरोध को नहीं समझता है। यहां तक ​​​​कि अगर सर्वर के भीतर एक अनंत लूप की कोई संभावना नहीं है, उनमें से दो (ए और बी) वाली प्रणाली अंतहीन रूप से लूप कर सकती है: यदि ए को बी से अज्ञात प्रकार का संदेश प्राप्त होता है, तो ए एक त्रुटि संदेश के साथ बी को उत्तर देता है। ; यदि B त्रुटि संदेश को नहीं समझता है, तो वह A को अपने स्वयं के त्रुटि संदेश के साथ उत्तर देता है; यदि A, B के त्रुटि संदेश को नहीं समझता है, तो वह एक और त्रुटि संदेश भेजता है, इत्यादि।

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

छद्म-अनंत लूप
छद्म-अनंत लूप एक ऐसा लूप है जो अनंत दिखाई देता है लेकिन वास्तव में यह बहुत लंबा लूप है।

बहुत बड़ी संख्या
बैश (यूनिक्स शेल) में एक उदाहरण: <वाक्यविन्यास लैंग = बैश> x के लिए $(seq 1000000000); करना किया हुआ 
 * 1) लूप कोड

असंभव समाप्ति की स्थिति
सी (प्रोग्रामिंग भाषा) में लूप के लिए एक उदाहरण: <वाक्यविन्यास प्रकाश लैंग = सी> अहस्ताक्षरित int मैं; के लिए (मैं = 1; मैं! = 0; मैं ++) { /* लूप कोड */ }  ऐसा प्रतीत होता है कि यह अनिश्चित काल तक चलेगा, लेकिन वास्तव में इसका मूल्य  अंततः एक में संग्रहीत अधिकतम मूल्य तक पहुंच जाएगा   और उस संख्या में 1 जोड़ने से लूप टूट जाएगा। की वास्तविक सीमा   उपयोग किए गए सिस्टम और संकलक के विवरण पर निर्भर करता है। मनमाना-सटीक अंकगणित के साथ, यह लूप तब तक जारी रहेगा जब तक कि कंप्यूटर की मेमोरी (कंप्यूटर) अब और नहीं पकड़ सकता. अगर  एक हस्ताक्षरित पूर्णांक था, एक अहस्ताक्षरित पूर्णांक के बजाय, अतिप्रवाह अपरिभाषित होगा। इस मामले में, संकलक कोड को अनंत लूप में अनुकूलित कर सकता है।

अनंत पुनरावर्तन
अनंत पुनरावर्तन अनंत लूप का एक विशेष मामला है जो पुनरावर्तन के कारण होता है।

अनुप्रयोगों के लिए Visual Basic में निम्न उदाहरण स्टैक ओवरफ़्लो त्रुटि देता है: <वाक्यविन्यास लैंग = वीबी> उप परीक्षण1 कॉल टेस्ट1 अंत उप 

ब्रेक स्टेटमेंट
ए लूप पहली नज़र में अनंत दिखता है, लेकिन ब्रेक स्टेटमेंट या वापसी कथन के माध्यम से लूप से बचने का एक तरीका हो सकता है। PHP में उदाहरण: <वाक्यविन्यास लैंग = php> जबकि (सच) { अगर ($ फू-> बार ) { वापसी; } } 

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

एल्डर्सन लूप का एक सी-जैसा स्यूडोकोड उदाहरण, जहां कार्यक्रम को उपयोगकर्ता द्वारा दी गई संख्याओं को शून्य तक दिए जाने तक माना जाता है, लेकिन जहां प्रोग्रामर ने गलत ऑपरेटर का उपयोग किया है: <वाक्यविन्यास लैंग = सी> इंट योग = 0; int मैं; जबकि (सच) { प्रिंटफ (योग में जोड़ने के लिए एक संख्या दर्ज करें या छोड़ने के लिए 0); मैं = getUserInput ; if (i * 0) { // यदि i गुना 0 सत्य है, तो योग में i जोड़ें। Note: ZERO का मतलब FALSE होता है, Non-Zero का मतलब TRUE होता है. i * 0 शून्य (गलत) है! योग + = मैं; // योग कभी नहीं बदलता क्योंकि (i * 0) किसी भी i के लिए 0 है; यह बदल जाएगा अगर हमारे पास != स्थिति में * के बजाय }  अगर (योग> 100) { तोड़ना; // लूप को समाप्त करें; बाहर निकलने की स्थिति मौजूद है लेकिन कभी नहीं पहुंची है क्योंकि योग में कभी जोड़ा नहीं जाता है } } 

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

यह भी देखें

 * साइकिल का पता लगाना
 * गतिरोध
 * डाइवर्जेंस (कंप्यूटर साइंस)
 * कांटा बम (एक अनंत लूप दो प्रमुख घटकों में से एक है)
 * के लिए जाओ
 * अनंत प्रतिगमन
 * पुनरावृत्ति (कंप्यूटर विज्ञान)

बाहरी कड़ियाँ

 * Make an infinite loop in several languages, on programming-idioms.org.