ما الفرق بين بنية Node.js المبنية على الأحداث والبرمجة متعددة الخيوط بلغات أخرى؟


الاجابه 1:

في النموذج القائم على الحدث والمتعدد الخيوط ، يتم تشغيل الرمز داخل عملية نظام التشغيل.

عندما تقوم العملية بتشغيل عدة مؤشرات ترابط ، فإن مؤشرات الترابط هذه تشارك ذاكرة العملية (مساحة العنوان) في القراءة والكتابة.

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

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



الاجابه 2:

هذا سؤال جيد ، "ما الفرق بين بنية Node.js المبنية على الأحداث والبرمجة متعددة الخيوط بلغات أخرى؟".

يمكننا ويجب علينا كسر هذا قليلاً.

  • بنية عقدة الحدث مدفوعة.

الهندسة المعمارية للأحداث لا تقتصر على Node ، على سبيل المثال ، Tornado (Python) و Vertx (Java) و Akka (Scala) و ReactiveX (لغات متعددة).

  • البرمجة متعددة الخيوط بلغات أخرى.

لاحظ أن JavaScript ، حسب التصميم ، لا يدعم سلاسل عمليات متعددة. على الرغم من أنه يدعم مشغلي الويب ، الذين ، حسب علمي ، يمكن أن يعملوا كخيوط.

لذا ، فإن الحدث القائم على الحدث ليس فريدًا بالعقدة ويمكن إجراء خيوط متعددة في العقدة.

لذلك يمكن أن يكون هناك سؤالان هنا: "ما هو الفرق بين الخيوط المتعددة التي تستند إلى الأحداث" و "ما هو الفرق بين العقدة واللغات الأخرى (الأطر)". سوف أركز على هذا الأخير لأنه يبدو أن الهدف من السؤال هو.

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

بخلاف ذلك ، يجب أن تقرأ عن نماذج متعددة لـ "التزامن" وتفهم إيجابيات وسلبيات كل منها. نقاط المكافأة لتقدير لماذا خيوط متعددة كان مقبولا لمثل هذا الوقت الطويل.



الاجابه 3:

الاختلافات المفاهيمية سهلة لفّ رأسك.

في البنية التي تعتمد على الأحداث ، يتم تشغيل البرنامج في حلقة مفردة مترابطة (يمكنك القيام ببعض الخيوط المتعددة في العقدة ولكن لا تقلق بشأن ذلك في الوقت الحالي). عندما ينطلق حدث ما ، تكون الوظيفة في حزمة المكالمة لتتم معالجتها في أوقات فراغ البرامج.

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

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