GoLang में गतिरोध: बफर्ड चैनल पर रेंज क्यों?
GoLang में बफर्ड चैनलों का उपयोग करते समय, गतिरोध की स्थिति पैदा करने से बचना महत्वपूर्ण है . हाल के एक मुद्दे ने सभी गोरआउट्स पूरे होने के बाद एक बफ़र्ड चैनल पर रेंज करने का प्रयास करते समय आने वाले गतिरोध के बारे में चिंता जताई। चैनल को. हालाँकि, गतिरोध इसलिए होता है क्योंकि:
चैनल का आकार बहुत छोटा है, जिसके परिणामस्वरूप अवरुद्ध गोरोइन पूरे चैनल पर लिखने की प्रतीक्षा कर रहे हैं।गतिरोध को हल करने के लिए, चैनल का आकार बढ़ाया जा सकता है और सभी गोरोइन पूरा होने के बाद बंद किया जा सकता है:
ch := make(chan []int, 5 ) ... wg.रुको() बंद करें(ch)ch := make(chan []int, 5)
...
wg.Wait()
close(ch)
समाधान 2: प्रिंटिंग रूटीन के भीतर से सिग्नल समापनवास्तविक पाइपलाइनिंग को सक्षम करने के लिए, प्रिंटिंग के भीतर Done() फ़ंक्शन को कॉल किया जा सकता है दिनचर्या:
func main() { ch := बनाओ(चान []int, 4) ... जाओ func() { सी के लिए := रेंज सीएच { fmt.Printf('c %v\n है', c) wg.हो गया() } }() ... }func main() {
ch := make(chan []int, 4)
...
go func() {
for c := range ch {
fmt.Printf("c is %v\n", c)
wg.Done()
}
}()
...
}
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3