"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف تعمل حلقة الحدث في Node.js؟

كيف تعمل حلقة الحدث في Node.js؟

تم النشر بتاريخ 2024-08-24
تصفح:946

How event loop work in Node.js?

تعد حلقة الحدث مفهومًا أساسيًا في Node.js الذي يمكّنها من التعامل مع العمليات غير المتزامنة بكفاءة. وإليك شرح مبسط لكيفية العمل:

1. طبيعة مترابطة واحدة

يعمل Node.js على مؤشر ترابط واحد. هذا يعني أنه يمكنه تنفيذ جزء واحد فقط من التعليمات البرمجية في كل مرة. ومع ذلك، تم تصميم Node.js للتعامل مع العديد من العمليات بشكل متزامن دون الحاجة إلى عدة سلاسل عمليات.

2. الإدخال/الإخراج غير المحظور

يستخدم Node.js عمليات الإدخال/الإخراج غير المحظورة. عندما يقوم Node.js بمهام مثل قراءة الملفات، أو الاستعلام عن قاعدة بيانات، أو تقديم طلبات الشبكة، فإنه لا ينتظر اكتمال هذه المهام قبل الانتقال إلى المهمة التالية. وبدلاً من ذلك، يستمر في تنفيذ تعليمات برمجية أخرى أثناء معالجة هذه المهام.

3. آلية حلقة الحدث

حلقة الحدث مسؤولة عن إدارة تنفيذ التعليمات البرمجية والتعامل مع الأحداث غير المتزامنة. فهو يتحقق بشكل مستمر من "قائمة الانتظار" للمهام ويقرر المهام التي سيتم تنفيذها. فيما يلي تفصيل خطوة بخطوة:

  • التهيئة: عندما يبدأ تطبيق Node.js، فإنه يقوم بتهيئة البيئة وإعدادها.
  • مرحلة التنفيذ: يقوم Node.js بتنفيذ أي تعليمات برمجية أولية بشكل متزامن. إذا كانت هناك مهام غير متزامنة (مثل قراءة الملفات أو طلبات HTTP)، فسيتم تسليمها إلى واجهات برمجة التطبيقات (APIs) الخاصة بالنظام.
  • مراحل حلقة الحدث: تحتوي حلقة الحدث على عدة مراحل، وتقوم بمعالجة المهام في كل مرحلة بترتيب معين:
    • مرحلة المؤقتات: تنفيذ عمليات رد الاتصال المجدولة بواسطة setTimeout() وsetInterval().
    • مرحلة عمليات رد الاتصال IO: تنفيذ عمليات رد الاتصال لعمليات الإدخال/الإخراج، مثل قراءة الملفات أو طلبات الشبكة.
    • مرحلة الخمول والتحضير: المرحلة الداخلية المستخدمة لمهام النظام.
    • مرحلة الاستقصاء: استرداد أحداث الإدخال/الإخراج الجديدة وتنفيذ عمليات الاسترجاعات الخاصة بها. إذا كانت قائمة انتظار الاستقصاء فارغة، فسوف تتحقق مما إذا كانت هناك عمليات رد اتصال في قائمة انتظار setImmediate().
    • مرحلة التحقق: تنفيذ عمليات رد الاتصال المجدولة بواسطة setImmediate().
    • مرحلة عمليات رد الاتصال: تتعامل مع أحداث الإغلاق، مثل تلك المنبعثة من المقبس.on('إغلاق').
  • إعادة الفحص والخروج: إذا لم يكن لدى حلقة الحدث المزيد من المهام لمعالجتها، فسيتم الخروج، مما يسمح للبرنامج بالإنهاء. إذا كانت هناك مهام لا تزال معلقة، فسوف يستمر تشغيلها.

4. قائمة انتظار رد الاتصال

المهام غير المتزامنة، بمجرد اكتمالها، تدفع عمليات الاسترجاعات الخاصة بها إلى قائمة الانتظار. تختار حلقة الحدث عمليات الاسترجاعات هذه من قائمة الانتظار وتنفذها بالترتيب.

5. قائمة انتظار المهام الصغيرة (علامة الاختيار التالية)

بصرف النظر عن قائمة الانتظار الرئيسية، هناك أيضًا قائمة انتظار للمهام الصغيرة (أو قائمة انتظار التجزئة التالية) حيث يتم وضع عمليات الاسترجاعات المجدولة باستخدام Process.nextTick() أو معالجات الوعود .then() في قائمة الانتظار. تتمتع المهام الصغيرة بالأولوية على عمليات الاسترجاعات العادية، مما يعني أنها يتم تنفيذها بعد اكتمال العملية الحالية ولكن قبل أن تنتقل حلقة الحدث إلى المرحلة التالية.

مثال

إليك مثال بسيط لتوضيح كيفية عمل حلقة الحدث:

const fs = require('fs');

console.log('Start');

fs.readFile('file.txt', (err, data) => {
  if (err) throw err;
  console.log('File read complete');
});

console.log('End');

الإخراج:

Start
End
File read complete

توضيح:

  1. console.log('ابدأ'); و console.log('النهاية'); يتم تنفيذها بشكل متزامن.
  2. يبدأ fs.readFile عملية قراءة ملف غير متزامنة ويستمر في تنفيذ السطر التالي من التعليمات البرمجية دون انتظار.
  3. بمجرد اكتمال عملية قراءة الملف، يتم دفع رد الاتصال الخاص به (console.log('اكتملت قراءة الملف');) إلى قائمة انتظار رد الاتصال الخاصة بحلقة الحدث.
  4. تعالج حلقة الحدث رد الاتصال بعد اكتمال تنفيذ التعليمات البرمجية المتزامنة.

تسمح حلقة الأحداث لـ Node.js بالتعامل بكفاءة مع العديد من العمليات في وقت واحد، على الرغم من كونها ذات ترابط واحد، من خلال تفويض العمليات إلى النظام ومعالجة نتائجها بشكل غير متزامن.

تقوم حلقة الأحداث بتنسيق تنفيذ المهام، مع إعطاء الأولوية لـ قائمة انتظار المهام الدقيقة لضمان حل الوعود والعمليات ذات الصلة بسرعة قبل الانتقال إلى المهام في قائمة انتظار المهام الرئيسية (مهمة ماكرو).

تمكن هذه الديناميكية جافا سكريبت من التعامل مع السلوك غير المتزامن المعقد في بيئة ذات ترابط واحد.

بيان الافراج تم نشر هذه المقالة على: https://dev.to/syed_ammar/how-event-loop-work-in-nodejs-4lf4?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3