𝗖𝗵𝗮𝗻𝗻𝗲𝗹𝘀 மூலம் 𝗚𝗼 𝗖𝗼𝗻𝗰𝘂𝗿𝗿𝗲𝗻𝗰𝘆-யில் தேர்ச்சி பெறுங்கள்

நான் ஒருமுறை Go-வில் ஒரு image processing pipeline-ஐ உருவாக்கினேன்.

ஒவ்வொரு படிநிலைக்கும் நான் goroutines-களைப் பயன்படுத்தினேன். அவற்றை channels மூலம் இணைத்தேன். 'run' செய்தேன்.

நிரல் (program) உறைந்து போனது. Memory பயன்பாடு அதிகரித்தது. பிறகு அது செயலிழந்தது. எந்தப் பிழைகளும் (errors) வரவில்லை. அமைதி மட்டுமே நிலவியது.

ஒரு பழுதான scheduler-ஐச் சரிசெய்ய (debug) பல மணிநேரங்களை வீணடித்தேன். நான் தவறு செய்தேன். channels எவ்வாறு செயல்படுகின்றன என்பதை நான் சரியாகப் புரிந்துகொள்ளவில்லை.

உங்கள் Go நிரல்கள் முடங்குவதைத் தவிர்க்க இதோ மூன்று விதிகள்.

  1. Nil channels கருந்துளைகள் போன்றவை ஒரு nil channel எப்போதும் முடக்கிவிடும் (blocks). நீங்கள் ஒரு nil channel-இல் தரவை அனுப்பினால் அல்லது பெற முயன்றால், அந்த goroutine அப்படியே சிக்கிக்கொள்ளும்.
  1. Closing விதிகள் panics-ஐத் தவிர்க்கும் ஒரு channel-ஐ மூடுவது (closing) நிரந்தரமானது.
  1. பாதுகாப்பிற்காக channel directions-களைப் பயன்படுத்துங்கள் ஒரு channel தரவை அனுப்பப் பயன்படுகிறதா அல்லது பெறப் பயன்படுகிறதா என்பதைத் தீர்மானிக்க Go அனுமதிக்கிறது.

ஒரு தெளிவான pipeline-ஐ உருவாக்குவது எப்படி:

இந்த முறைகளைப் பின்பற்றும்போது, leaks மற்றும் panics-களைத் தவிர்க்கலாம். எளிதாகச் சோதனை செய்யக்கூடிய மற்றும் வலுவான (robust) அமைப்புகளை நீங்கள் உருவாக்க முடியும்.

உங்கள் சவால்: பல input channels-களை ஒரே output channel-ஆக இணைக்கும் ஒரு function-ஐ எழுதுங்கள். select loop-ஐப் பயன்படுத்துங்கள். 500ms timeout-ஐச் சேர்க்கவும். எந்த goroutine-களும் leak ஆகாமல் இருப்பதை உறுதி செய்யவும்.

உங்கள் தீர்வைக் கருத்துப் பகுதியில் (comments) பதிவிடுங்கள்.

ஆதாரம்: https://dev.to/timevolt/go-concurrency-the-jedis-guide-to-goroutines-channels-may-the-fork-be-with-you-2g79