تكرار السؤال: …
الإجابة المختصرة
process.nextTick تنفذ فوراً بعد العملية الحالية وقبل أي مرحلة تالية من الـ Event Loop، بينما setImmediate تنفذ في مرحلة Check من الـ Event Loop.
الشرح
على الرغم من التسمية المضللة تاريخياً، فإن process.nextTick لا تعد جزءاً من مراحل libuv نفسها، بل تعمل كطابور microtask ذي أولوية قصوى يُفرغ مباشرة قبل عودة التحكم إلى الـ event loop. في المقابل، تُسجل setImmediate كـ callback تُستدعى حصرياً في مرحلة Check بعد انتهاء مرحلة Poll. الإفراط في استخدام nextTick قد يسبب تجويعاً (starvation) للـ I/O.
مثال بالكود
setImmediate(() => console.log("Check: immediate"));
process.nextTick(() => console.log("Microtask: nextTick"));أخطاء شائعة
- استخدام process.nextTick في استدعاءات عودية مما يتسبب في تجميد كامل الـ I/O.
أسئلة متابعة
- ما هي المراحل الأساسية للـ Event Loop في Node.js وكيف تعالج المهام المختلفة؟
- كيف تختلف أولوية الـ Microtasks عن الـ Macrotasks في معالجة المهام بـ Node.js؟