2009-11-11 40 views
9

मैं हमेशा "गेटो" की भयानक चीज़ के बारे में पढ़ता हूं। लेकिन आज, Google प्रोग्रामिंग भाषा Go के बारे में पढ़ते हुए, मुझे लगता है कि यह Coroutines (Goroutines) का पूरक है।Coroutines और `goto` के बीच मतभेद?

सवाल यह है:

Coroutine == GoTo 

या

Coroutine != GoTo? 

क्यों?

+2

आपको यह भी पता चलेगा कि गोरौटाइन! = कोरोटाइन। एक गोरौटाइन वास्तव में सरल निर्माण और प्रबंधन के साथ एक थ्रेड की तरह है। http://golang.org/doc/effective_go.html#goroutines –

उत्तर

17

गोरोटाइन्स गोटो के समान नहीं हैं - वे मुख्य कोड के साथ समानांतर में चलते हैं। जब आप (http://golang.org/doc/effective_go.html पर उनके उदाहरण से) की तरह कुछ

go list.Sort(); // run list.Sort in parallel; don't wait for it. 

राज्य मेनलाइन कोड जारी है पर - यह तरह समाप्त होने की प्रतीक्षा नहीं करता है। सॉर्ट रूटीन निष्पादन के अपने हल्के धागे पर शुरू होता है और जब यह थ्रेड निकलता है तो यह खत्म हो जाता है।

ए गोटो मुख्य लाइन कोड को अलग निष्पादन पथ में शाखा का कारण बनता है - इसलिए goto के बाद के बयान कभी नहीं चलेंगे।

8

मुख्य अंतर यह है कि goto उन भाषाओं में बयान जो उन्हें समर्थन देते हैं, कार्यक्रम में किसी भी स्थान पर कम या कोई प्रतिबंध नहीं देते हैं। जबकि सतह पर coroutines समान लग सकता है वे बहुत अलग हैं।

कोरआउट्स प्रक्रियाओं को निलंबित करने की अनुमति देता है (उनके सभी संदर्भों के साथ) और पर स्थानों पर फिर से शुरू किया गया। इसलिए कोरआउटिन रोकते हैं और yield पूर्ण होने से पहले अन्य प्रक्रियाओं पर नियंत्रण करते हैं और फिर बाद में फिर से शुरू करते हैं, जिन बिंदुओं पर प्रक्रियाएं उत्पन्न होती हैं और फिर से शुरू होती हैं, समय से पहले ज्ञात होती हैं।

प्रक्रिया में किसी मनमानी रेखा पर कूदना संभव नहीं है, प्रश्न में प्रक्रिया को किसी विशिष्ट स्थान पर फिर से शुरू करने का इंतजार करना पड़ता है। हालांकि नियंत्रण के इस गुजरने से goto की तुलना में अधिक संरचित है, इस शक्तिशाली तंत्र को अत्यधिक उपयोग करके भ्रमित कोड लिखना संभव है। फिर फिर यह है कि हर शक्तिशाली प्रोग्रामिंग भाषा सुविधा के साथ मामला नहीं है? ;-)

संबंधित मुद्दे