0%
النموذج غير المتزامن

النموذج غير المتزامن

حلقة الأحداث، والوعود (Promises)، وكل ما يجمّد خادم Node.

10-15 دقيقة

النموذج غير المتزامن

نقطة نهاية (endpoint) كانت تستجيب في 30 ميلي ثانية أصبحت تستجيب في 4 ثوانٍ، ولكن فقط عندما تُستدعى نقطة نهاية أخرى. ليس بين الاثنتين أي شيفرة مشتركة، ولا قاعدة بيانات مشتركة، ولا قفل. تُظهر آثار التنفيذ زمن معالجة طبيعيًا على مستوى التطبيق؛ أما الزمن الفاصل بين وصول الحزمة وبدء المعالجة فهو الذي ينفجر. لا تكشف أدوات التحليل (profiling) التقليدية المتسبب في ذلك، لأنه ليس في المسار الذي تتم مراقبته.

هذا السيناريو هو العلامة المميزة لحلقة أحداث معطّلة، وهو نمط الأعطال الأكثر شيوعًا والأكثر إرباكًا في Node. يكفي استدعاء متزامن مكلف واحد — قراءة ملف باستخدام readFileSync، أو JSON.parse على ثلاثة ميغابايت، أو تعبير نمطي كارثي (catastrophic regex)، أو تجزئة bcrypt بعامل تكلفة مرتفع — لتعليق جميع الطلبات الأخرى في العملية. يقدّم لكم هذا الدرس النموذج الذهني الدقيق لما يحدث، ثم الأدوات اللازمة لقياسه وإصلاحه.

المكدس، وطابور الرسائل، والحلقة

ينفّذ Node شيفرة JavaScript الخاصة بكم على مكدس استدعاءات (call stack) واحد. عندما يفرغ المكدس، تنظر حلقة الأحداث في ما هو جاهز وتضع وحدة العمل التالية في المكدس. هذه الحلقة ليست طابورًا واحدًا: فهي تمر بمراحل متعاقبة، بشكل دوري، ما دام هناك عمل متبقٍّ.

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!