چینلز کے ساتھ Go Concurrency میں مہارت حاصل کریں

میں نے ایک بار Go میں ایک امیج پروسیسنگ پائپ لائن بنائی تھی۔

میں نے ہر مرحلے کے لیے goroutines کا استعمال کیا۔ میں نے انہیں channels کے ذریعے جوڑا۔ میں نے اسے رن (run) کیا۔

پروگرام جم گیا۔ میموری کا استعمال بڑھ گیا۔ پھر یہ بند ہو گیا۔ کوئی ایرر (error) نہیں تھا۔ صرف خاموشی تھی۔

میں نے ایک خراب شیڈیولر (scheduler) کو ڈی بگ (debug) کرنے میں گھنٹوں ضائع کیے۔ میں غلط تھا۔ میں نہیں سمجھتا تھا کہ channels کیسے کام کرتے ہیں۔

اپنے Go پروگرامز کو ہینگ (hang) ہونے سے روکنے کے لیے یہاں تین اصول دیے گئے ہیں۔

  1. Nil channels بلیک ہولز (black holes) کی طرح ہیں ایک nil channel ہمیشہ کے لیے بلاک ہو جاتا ہے۔ اگر آپ nil channel پر کچھ بھیجتے یا وصول کرتے ہیں، تو goroutine پھنس جاتی ہے۔
  1. کلوزنگ (closing) کے اصول پینکس (panics) سے بچاتے ہیں چینل کو کلوز کرنا مستقل عمل ہے۔
  1. حفاظت کے لیے چینل کی سمتوں (directions) کا استعمال کریں Go آپ کو یہ بتانے کی اجازت دیتا ہے کہ چینل بھیجنے کے لیے ہے یا وصول کرنے کے لیے۔

ایک صاف ستھری پائپ لائن کیسے بنائیں:

جب آپ ان پیٹرنز (patterns) پر عمل کرتے ہیں، تو آپ لیکس (leaks) اور پینکس (panics) سے بچتے ہیں۔ آپ ایسے سسٹم بناتے ہیں جنہیں ٹیسٹ کرنا آسان اور مضبوط (robust) ہوتا ہے۔

آپ کا چیلنج: ایک ایسا فنکشن لکھیں جو متعدد ان پٹ چینلز کو ایک آؤٹ پٹ چینل میں ضم (merge) کر دے۔ select لوپ کا استعمال کریں۔ 500ms کا ٹائم آؤٹ (timeout) شامل کریں۔ یقینی بنائیں کہ کوئی goroutine لیک نہ ہو۔

اپنا حل کمنٹس میں پوسٹ کریں۔

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