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

મેં એકવાર Go માં ઇમેજ પ્રોસેસિંગ પાઇપલાઇન બનાવી હતી.

મેં દરેક સ્ટેપ માટે goroutines નો ઉપયોગ કર્યો. મેં તેમને channels સાથે જોડ્યા. મેં રન (run) કર્યું.

પ્રોગ્રામ ફ્રીઝ થઈ ગયો. મેમરી વપરાશ વધ્યો. પછી તે બંધ થઈ ગયો. કોઈ એરર (errors) નહોતી. માત્ર શાંતિ હતી.

મેં બગડેલા શેડ્યુલરને ડિબગ કરવામાં કલાકો બગાડ્યા. હું ખોટો હતો. મને ખબર નહોતી કે channels કેવી રીતે કામ કરે છે.

તમારા Go પ્રોગ્રામ્સને હેંગ થતા રોકવા માટે અહીં ત્રણ નિયમો છે.

  1. Nil channels એ બ્લેક હોલ છે એક nil channel કાયમ માટે બ્લોક થઈ જાય છે. જો તમે nil channel પર ડેટા મોકલો અથવા મેળવો, તો goroutine અટકી જાય છે.
  1. ક્લોઝિંગના નિયમો પેનિક (panics) ને અટકાવે છે ચેનલ બંધ કરવી એ કાયમી છે.
  1. સુરક્ષા માટે channel directions નો ઉપયોગ કરો Go તમને સ્પષ્ટ કરવાની મંજૂરી આપે છે કે ચેનલ મોકલવા માટે છે કે મેળવવા માટે.

ક્લીન પાઇપલાઇન કેવી રીતે બનાવવી:

જ્યારે તમે આ પેટર્ન અનુસરો છો, ત્યારે તમે leaks અને panics ને અટકાવો છો. તમે એવા સિસ્ટમ્સ બનાવો છો જે ટેસ્ટ કરવામાં સરળ અને મજબૂત (robust) હોય છે.

તમારો પડકાર: એક ફંક્શન લખો જે અનેક ઇનપુટ channels ને એક આઉટપુટ channel માં ભેગા કરે. select લૂપનો ઉપયોગ કરો. 500ms નો timeout ઉમેરો. ખાતરી કરો કે કોઈ goroutines leak ન થાય.

તમારો ઉકેલ કોમેન્ટ્સમાં પોસ્ટ કરો.

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