تكرار السؤال: …
الإجابة المختصرة
يمر الـ Event Loop بمراحل متتالية: Timers، Pending callbacks، Idle/Prepare، Poll، Check، وClose callbacks، مع معالجة microtasks بين المراحل.
الشرح
يدير الـ Event Loop بواسطة مكتبة libuv؛ تبدأ دورته بمرحلة Timers (تنفيذ callbacks الخاصة بـ setTimeout وsetInterval)، تليها Pending callbacks لأخطاء الـ I/O المؤجلة، ثم Poll لانتظار أحداث الـ I/O الجديدة، ثم Check لتنفيذ callbacks الخاصة بـ setImmediate، وأخيراً Close callbacks لإغلاق المقابس والـ handles. يتم تفريغ طابور الـ microtasks (مثل process.nextTick والـ Promises) فور انتهاء كل عملية أو مرحلة قبل الانتقال للمرحلة التالية.
مثال بالكود
setTimeout(() => console.log("Timer"), 0);
setImmediate(() => console.log("Immediate"));
process.nextTick(() => console.log("Next Tick"));أخطاء شائعة
- الاعتقاد بأن setTimeout(fn, 0) تنفذ فوراً في نفس اللحظة دون انتظار دورة الـ event loop.
- تجاهل أولوية process.nextTick على الـ microtasks الأخرى للـ Promise.
أسئلة متابعة
- ما الفرق الجوهري بين process.nextTick() و setImmediate() في Node.js؟
- كيف تختلف أولوية الـ Microtasks عن الـ Macrotasks في معالجة المهام بـ Node.js؟