खाली select
कथन केवल वर्तमान goroutine को अवरुद्ध करता है।
क्यों आप ऐसा करेंगे, यहां एक कारण है। यह स्निपेट
if *serve != "" {
fmt.Fprintln(os.Stderr, "httptest: serving on", s.URL)
s.Config.Serve(s.Listener)
} else {
go s.Config.Serve(s.Listener)
}
यह बेहतर है कि बर्बाद गोरौटाइन नहीं है। इसमें अब भी बदतर है कोड कोड दोहराव है। लेखक बर्बाद संसाधन पर कम कोड पुनरावृत्ति के लिए अनुकूलित किया गया। नोट हालांकि स्थायी रूप से ब्लॉक गोरौटाइन को पहचानने के लिए तुच्छ है और डुप्लिकेटिंग संस्करण पर शून्य लागत हो सकती है।
स्रोत
2013-09-06 16:16:32
यह मेरा अनुमान था। हालांकि मुझे अभी भी यह अर्थपूर्ण रूप से अजीब लगता है, क्योंकि 'चयन' एक शर्त सुझाता है, न कि लूप। –
सीएपीयू पर गहन होने के लिए AFAIK खाली होगा (कम से कम यह है कि असीमित अनंत लूप अन्य भाषाओं में कैसे काम करते हैं)। ओपी के उदाहरण में यह संभव है कि {gor का उपयोग मुख्य goroutine से बाहर निकलने से रोकने के लिए किया जाता है। – justinas
सीएसपी-बोल में, खाली चयन 'STOP' की तरह है, एक प्रक्रिया जो कभी नहीं बढ़ती है। यह एक स्व-डेडलॉक के समान है और मुझे लगता है कि यह अक्सर उपयोग नहीं किया जाता है। हालांकि, इस पैटर्न के लिए सवाल ने एक दिलचस्प और वास्तविक उपयोग-मामले का प्रस्ताव दिया। {} 'लूप के लिए एक खाली 'एक स्व-जीवनशैली है, अलग है क्योंकि यह सीपीयू संसाधनों का उपभोग करता है। –