आइए फैन-इन पैटर्न पर एक नजर डालें। यह वास्तव में तब उपयोगी होता है जब हमारे पास कई थ्रेड्स से संबंधित डेटा होता है जिसे हमें एक साथ लाने की आवश्यकता होती है।
उदाहरण के लिए, मान लीजिए कि आपने विभिन्न सेवाओं के लिए कई एपीआई कॉल किए हैं और आपको परिणामों को संयोजित करने की आवश्यकता है।
यह लागू करने के लिए वास्तव में आसान पैटर्न है, लेकिन आपको इस बात पर ध्यान देने की आवश्यकता है कि आप चैनलों को कैसे संभालते हैं। गतिरोध की स्थिति प्राप्त करना आसान है।
// produce is used to simulate the different data sources func produce(id int) chan int { ch := make(chan int) go func() { for i := 0; iयहां हम विभिन्न स्रोतों का अनुकरण करने के लिए उपज फ़ंक्शन का उपयोग करते हैं। इन स्रोत चैनलों को फैनिन फ़ंक्शन पर भेजा जाता है जो संयोजन ऑपरेशन करता है।
फैनिन फ़ंक्शन आउटपुट चैनल बनाता है, फिर एक गोरोइन लॉन्च करता है जो प्रत्येक इनपुट पर काम करता है। हम यह इंगित करने के लिए वेटग्रुप का उपयोग करते हैं कि सभी इनपुट स्रोतों को आउटपुट चैनल में कब संयोजित किया गया है।
इस सरल उदाहरण में, मुख्य थ्रेड केवल आउटपुट पर पुनरावृत्त होता है। ध्यान दें कि ऑर्डर पर कोई गारंटी नहीं है, 2 इनपुट के मान मिश्रित हैं।
एक महत्वपूर्ण मुद्दा यह है कि जब हम इनपुट का संयोजन पूरा कर लेते हैं तो हमें आउटपुट चैनल को बंद करना होगा। चैनल खाली होने पर रेंज ऑपरेटर अनिश्चित काल तक प्रतीक्षा करेगा। क्लोज़ (आउटपुट) लाइन पर टिप्पणी करें और आप देखेंगे कि आपको एक गतिरोध स्थिति मिलेगी।
हम इसमें कैसे सुधार ला सकते हैं? मुझे नीचे एक टिप्पणी छोड़ें।
धन्यवाद!
इस पोस्ट और इस श्रृंखला के सभी पोस्ट का कोड यहां पाया जा सकता है
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3