تعتمد الآلية غير المتزامنة للعقدة على "الأحداث". يتم تنفيذ جميع عمليات الإدخال / الإخراج واتصالات الشبكة واستعلامات قاعدة البيانات بطريقة غير محظورة، وتتم معالجة النتائج التي تم إرجاعها بواسطة حلقة الأحداث. ستقوم العقدة بمعالجة حدث واحد فقط في نفس الوقت، وتدخل على الفور إلى حلقة الحدث للتحقق من الأحداث اللاحقة بعد الانتهاء. بهذه الطريقة، يمكن لوحدة المعالجة المركزية والذاكرة التركيز على معالجة شيء واحد في نفس الوقت، مع محاولة السماح بتنفيذ عمليات الإدخال/الإخراج والعمليات الأخرى التي تستغرق وقتًا طويلاً بالتوازي.
بيئة تشغيل هذا البرنامج التعليمي: نظام Windows 7، إصدار Nodejs 16، كمبيوتر DELL G3.
NodeJS ذو ترابط واحد له المزايا التالية:
بسيط وعالي
، وتجنب الحمل المتكرر للتبديل
والاستخدام الصغير للموارد نظرًا لأنه ذو ترابط واحد، فإن استخدام الذاكرة لا يزال منخفضًا جدًا في ظل ظروف التحميل
الثقيل -آمن، بدون قفل، كيفية حل مشاكل التزامن العالي مثل فتح القفل والجمود
؟
تستخدم العقدة عمليات الإدخال والإخراج غير المتزامنة (وظيفة رد الاتصال) المستندة إلى الأحداث لحل مشكلة التزامن العالي.
بشكل عام، ستوفر الحلول عالية التزامن نموذجًا متعدد الخيوط، مما يوفر خيطًا لكل منطق عمل، ويعوض الوقت الزائد لمكالمات الإدخال/الإخراج المتزامنة من خلال تبديل سلاسل عمليات النظام. مثل أباتشي، هناك موضوع واحد لكل طلب.
يستخدم NodeJS نموذجًا أحادي الترابط ويستخدم طرق طلب غير متزامنة لجميع عمليات الإدخال / الإخراج لتجنب التبديل المتكرر للسياق. ويحتفظ بقائمة انتظار الأحداث عند تنفيذ NodeJS؛ ويدخل البرنامج في حلقة الحدث عند التنفيذ وينتظر وصول الحدث التالي. سيتم دفع كل طلب إدخال/إخراج غير متزامن إلى قائمة انتظار الأحداث للتنفيذ بعد الانتهاء.
تعتمد آلية NodeJS غير المتزامنة على الأحداث، حيث يتم تنفيذ جميع عمليات الإدخال/الإخراج واتصالات الشبكة واستعلامات قاعدة البيانات بطريقة غير محظورة، وتتم معالجة النتائج التي تم إرجاعها بواسطة حلقة الحدث . كما هو موضح في الصورة:
ستقوم عملية Node.js بمعالجة حدث واحد فقط في كل مرة. بعد الانتهاء، ستدخل على الفور إلى حلقة الحدث للتحقق من الأحداث اللاحقة. وتتمثل ميزة ذلك في أن وحدة المعالجة المركزية والذاكرة يمكنهما التركيز على معالجة شيء واحد في نفس الوقت، مع محاولة السماح بتنفيذ عمليات الإدخال/الإخراج والعمليات الأخرى التي تستغرق وقتًا طويلاً بالتوازي. بالنسبة لهجمات الاتصال منخفضة السرعة، يضيف Node.js فقط الطلبات إلى قائمة انتظار الأحداث وينتظر استجابة نظام التشغيل، لذلك لا يوجد حمل متعدد الخيوط، مما يمكن أن يحسن بشكل كبير من قوة تطبيقات الويب ويمنع الهجمات الضارة.
آلية حلقة الحدث
تعني حلقة الحدث المزعومة أن NodeJS ستستخدم آلية الحدث لحل جميع العمليات غير المتزامنة. يوجد خيط يتكرر باستمرار لاكتشاف قائمة انتظار الأحداث.
كل المنطق في NodeJS هو وظيفة رد اتصال للحدث، لذا فإن NodeJS يكون دائمًا في حلقة الحدث، وإدخال البرنامج هو وظيفة رد الاتصال للحدث الأول في حلقة الحدث. قد تقوم وظيفة رد اتصال الحدث بإصدار طلب إدخال/إخراج أو إرسال الحدث مباشرةً والعودة إلى حلقة الحدث بعد التنفيذ. تتحقق حلقة الحدث من قائمة انتظار الأحداث بحثًا عن الأحداث غير المعالجة حتى انتهاء البرنامج. حلقة الأحداث الخاصة بـ NodeJS غير مرئية للمطورين ويتم تنفيذها بواسطة مكتبة libev، حيث تتحقق libev باستمرار مما إذا كان هناك مستمعين نشطين للأحداث يمكن اكتشافهم، ولا تخرج من حلقة الأحداث حتى لا يتم اكتشاف أي مستمعين للأحداث، وينتهي البرنامج.