لدى Python و Ruby أيضًا مثل هذا الإطار ، ولكن نظرًا لأن المكتبات التي تحتوي على رمز متزامن تستخدم حتماً في الاستخدام الفعلي ، فإنها لم تكبر. قبل Node.js ، كانت البرمجة من جانب خادم JavaScript فارغة تقريبًا ، لذلك تمكنت Node.js من إنشاء مكتبة رمز حيث كانت جميع IO غير متزامنة.
تقع اختناقات معظم تطبيقات الويب في IO ، وهي أقراص الأقراص وكتابةها ، وقراءة وكتابة الشبكات ، وقراءة قواعد البيانات والكتابة. أي نوع من الإستراتيجية التي يجب استخدامها لانتظار هذه الفترة الزمنية أصبحت النقطة الأساسية في تحسين الأداء.
استراتيجية PHP: قم بتشغيل عمليات متعددة ، وانتظر لإكمال IO مباشرة. العيوب: تستهلك عمليات متعددة ذاكرة متعددة ، مما يجعل من الصعب مشاركة البيانات بين العمليات.
C/C ++ الاستراتيجية المشتركة: تشغيل متعدد الخيوط ، ويحافظ البرنامج على حالة القفل نفسها. العيوب: تكلفة التطوير المرتفعة ، وسهلة ارتكاب الأخطاء ، وصعوبة تصحيحها.
Python (Tornado): يتم تنفيذ طلبات متعددة بدورها في عملية واحدة ، والتحول إلى طلب آخر عندما أواجه IO. العيوب: لطلب واحد ، لا يزال الوقت غير يستخدم بكفاءة أكبر.
ما هو "استخدام الوقت الأكثر كفاءة"؟ على سبيل المثال ، يوجد الآن استعلامات قاعدة بيانات غير ذات صلة. في PHP ، عادة ما يتم تنفيذ المرء أولاً ، وسيتم تنفيذ الثانية بعد الانتهاء من التنفيذ (إجمالي الوقت هو A + B). من الواضح أن هذا ليس الأكثر كفاءة. يجب تنفيذ استفسارين في نفس الوقت ، والوقت هو الحد الأقصى (أ ، ب).
إن مشكلة Python واللغات الأخرى التي تدعم MultiThreading هي أنه على مستوى اللغة ، من الصعب على المبرمجين إخبار الأجهزة الافتراضية بأنه ينبغي تنفيذ عمليتين في وقت واحد. حتى لو كانت هناك طريقة ، فهي مزعجة للغاية. معظم الناس كسولون للغاية لاستخدامهم (لا يستحق الاستخدام). نظرًا لأن Node.js يفرض على جميع تنفيذ IO بشكل غير متزامن ، يمكن أيضًا القول إن مبرمجي Node.js على دراية به. بالاقتران مع بعض المكتبات لتحسين قابلية قراءة التعليمات البرمجية (الوعد ، ASYNC) ، يمكن أن تسمح بسهولة بتنفيذ عمليات غير ذات صلة بالتوازي.
يتحدث أعلاه عن تنفيذ IO غير المتزامن ، فأين تنعكس مزايا IO غير المتزامن؟ في الواقع ، لا يمكن لـ IO غير المتزامن تقليل الضغط على الخادم بطريقة سحرية. لإضافة خادم ، لا تزال بحاجة إلى إضافة خادم ، ولكن IO غير المتزامن سيقلل من وقت طلب واحد وإزالة وقت الانتظار بلا معنى في طلب واحد. لذلك ، لم تتغير الطلبات التي تمت معالجتها خلال وقت الوحدة ، ولكن تم تقليل وقت المعالجة لكل طلب. من هذا المنظور ، يحفظ الخادم أيضًا بعض الموارد - أي ، يحافظ على الذاكرة التي يستهلكها كل اتصال مطلوب.