Node.js Event Loop کو سمجھنا

Event Loop کوئی ورکر (worker) نہیں ہے۔ یہ ایک کوآرڈینیٹر (coordinator) ہے۔

بہت سے ڈویلپرز کے لیے Event Loop کو سمجھنا پیچیدہ ہوتا ہے۔ مشکل اکثر اس وقت آتی ہے جب بہت سے تصورات (concepts) کو ایک ساتھ ملا دیا جاتا ہے۔ آپ کو libuv، Call Stack، Promises، اور I/O سب کو ایک ہی وقت میں ٹریک کرنا پڑتا ہے۔

حقیقت سادہ سی ہے۔ Event Loop کام کا شیڈول بناتا ہے۔ یہ خود کام نہیں کرتا۔

JavaScript ایک سنگل تھریڈ (single thread) پر چلتی ہے۔ اس کا مطلب ہے کہ کوڈ ایک سیدھی لائن میں چلتا ہے۔ ایک کام کا مکمل ہونا ضروری ہے اس سے پہلے کہ اگلا شروع ہو۔ ہمیں فائلیں پڑھنے یا نیٹ ورک کی درخواستوں جیسے غیر ہم آہنگ (asynchronous) کاموں کو پورے پروگرام کو روکے بغیر سنبھالنے کے لیے ایک سسٹم کی ضرورت ہوتی ہے۔

یہ کیسے کام کرتا ہے:

Event Loop مختلف کیوز (queues) سے کال بیکس (callbacks) کو Call Stack میں منتقل کرتا ہے۔ ہر مرحلے (phase) کو ایک لائن کے طور پر سوچیں۔ Event Loop وہ شخص ہے جو لوگوں کو لائن سے کمرے میں منتقل کرتا ہے۔

اہم مراحل یہ ہیں:

ایک عام غلطی یہ سمجھنا ہے کہ Event Loop کا اپنا Call Stack ہوتا ہے۔ ایسا نہیں ہے۔ رن ٹائم (runtime) کا ایک ہی Call Stack اور ایک microtask queue ہوتا ہے۔

یہ عمل اس ترتیب سے چلتا ہے:

  1. Event Loop موجودہ مرحلے سے ایک کال بیک منتخب کرتا ہے۔
  2. یہ اس کال بیک کو Call Stack میں پش (push) کرتا ہے۔
  3. Call Stack کوڈ کو چلاتا ہے۔
  4. جب کال بیک مکمل ہو جاتا ہے، تو انجن microtask queue کو خالی کرتا ہے۔ یہ وہ جگہ ہے جہاں Promises اور async/await کام کرتے ہیں۔
  5. Event Loop اگلے مرحلے پر چلا جاتا ہے۔

اگر آپ setTimeout(..., 0) استعمال کرتے ہیں، تو یہ Timers مرحلے میں جاتا ہے۔ اگر آپ setImmediate(...) استعمال کرتے ہیں، تو یہ Check مرحلے میں جاتا ہے۔

اصل بھاری کام OS kernel اور libuv میں ہوتا ہے۔ Event Loop صرف JavaScript کو بتاتا ہے کہ کب ردعمل دینے کا وقت ہے۔

ماخذ: https://dev.to/joaovictor6/event-loop-entendendo-uma-das-bases-do-node-41a