ఛానెల్స్‌తో Go Concurrencyని పట్టుకోండి

నేను ఒకసారి Goలో ఒక ఇమేజ్ ప్రాసెసింగ్ పైప్‌లైన్‌ను నిర్మించాను.

ప్రతి దశ కోసం నేను goroutines ఉపయోగించాను. వాటిని ఛానెల్స్‌తో అనుసంధానించాను. రన్ చేశాను.

ప్రోగ్రామ్ ఫ్రీజ్ అయిపోయింది. మెమరీ వినియోగం పెరిగింది. ఆపై అది ఆగిపోయింది. ఎటువంటి ఎర్రర్స్ లేవు. కేవలం నిశ్శబ్దం మాత్రమే ఉంది.

ఒక పాడైన షెడ్యూలర్‌ను డీబగ్ చేయడానికి నేను గంటల కొద్దీ సమయాన్ని వృధా చేశాను. నేను తప్పు చేశాను. ఛానెల్స్ ఎలా పనిచేస్తాయో నాకు అర్థం కాలేదు.

మీ Go ప్రోగ్రామ్‌లు హ్యాంగ్ అవ్వకుండా ఉండటానికి ఇక్కడ మూడు నియమాలు ఉన్నాయి.

  1. Nil ఛానెల్స్ బ్లాక్ హోల్స్ వంటివి ఒక nil ఛానెల్ శాశ్వతంగా బ్లాక్ చేస్తుంది. మీరు ఒక nil ఛానెల్‌లో డేటాను పంపినా లేదా స్వీకరించినా, ఆ goroutine అక్కడే ఆగిపోతుంది.
  1. క్లోజింగ్ నియమాలు పానిక్స్‌ను నివారిస్తాయి ఛానెల్‌ను క్లోజ్ చేయడం శాశ్వతమైనది.
  1. భద్రత కోసం ఛానెల్ డైరెక్షన్స్ ఉపయోగించండి ఛానెల్ పంపడానికా లేదా స్వీకరించడానికా అనేది పేర్కొనడానికి Go అనుమతిస్తుంది.

క్లీన్ పైప్‌లైన్‌ను ఎలా నిర్మించాలి:

మీరు ఈ పద్ధతులను అనుసరించినప్పుడు, లీక్‌లు మరియు పానిక్స్‌ను నివారిస్తారు. మీరు పరీక్షించడానికి సులభంగా మరియు దృఢంగా ఉండే సిస్టమ్‌లను నిర్మిస్తారు.

మీ సవాలు: బహుళ ఇన్‌పుట్ ఛానెల్స్‌ను ఒకే అవుట్‌పుట్ ఛానెల్‌లోకి విలీనం చేసే ఫంక్షన్‌ను వ్రాయండి. select లూప్‌ను ఉపయోగించండి. 500ms టైమ్ అవుట్‌ను జోడించండి. ఎటువంటి goroutines లీక్ కాకుండా చూసుకోండి.

మీ పరిష్కారాన్ని కామెంట్లలో పోస్ట్ చేయండి.

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