𝗠𝗮𝘀𝘁𝗲𝗿 𝗚𝗼 𝗖𝗼𝗻𝗰𝘂𝗿𝗿𝗲𝗻𝗰𝘆 𝗪𝗶𝘁𝗵 𝗖𝗵𝗮𝗻𝗻𝗲𝗹𝘀

मी एकदा Go मध्ये एक इमेज प्रोसेसिंग पाइपलाइन तयार केली होती.

मी प्रत्येक स्टेपसाठी goroutines वापरले. त्यांना channels ने जोडले. आणि रन केले.

प्रोग्राम फ्रीझ झाला. मेमरीचा वापर वाढला. आणि मग तो बंद पडला. कोणताही एरर आला नाही. फक्त शांतता होती.

मी तासनतास एका खराब शेड्यूलरला डीबग करण्यात घालवले. मी चुकीचा होतो. मला channels कसे काम करतात हे समजले नव्हते.

तुमचे Go प्रोग्राम्स हँग होऊ नयेत यासाठी येथे तीन नियम दिले आहेत.

  1. Nil channels हे ब्लॅक होल (black holes) आहेत एक nil channel कायमचे ब्लॉक करते. जर तुम्ही nil channel वर डेटा पाठवला किंवा प्राप्त केला, तर goroutine अडकून पडते.
  1. क्लोजिंगचे नियम 'panics' टाळतात चॅनेल क्लोज करणे ही कायमस्वरूपी प्रक्रिया आहे.
  1. सुरक्षिततेसाठी channel directions वापरा Go तुम्हाला चॅनेल डेटा पाठवण्यासाठी आहे की प्राप्त करण्यासाठी हे निर्दिष्ट करण्याची परवानगी देते.

एक स्वच्छ पाइपलाइन कशी तयार करावी:

जेव्हा तुम्ही या पॅटर्नचे पालन करता, तेव्हा तुम्ही लीक्स (leaks) आणि पॅनिक्स (panics) टाळता. तुम्ही सहज टेस्ट करता येतील आणि मजबूत (robust) अशी सिस्टिम्स तयार करता.

तुमचे आव्हान: एक असे फंक्शन लिहा जे अनेक इनपुट चॅनेल्सना एका आउटपुट चॅनेलमध्ये विलीन (merge) करेल. select लूप वापरा. 500ms चा टाइमआउट जोडा. कोणतीही goroutine लीक होणार नाही याची खात्री करा.

तुमचे उत्तर कमेंट्समध्ये पोस्ट करा.

Source: https://dev.to/timevolt/go-concurrency-the-jedis-guide-to-goroutines-channels-may-the-fork-be-with-you-2g79