لماذا تكون تطبيقات الشبكة القائمة على الأحداث أسرع بطبيعتها من التطبيقات المترابطة؟

StackOverflow https://stackoverflow.com/questions/290128

سؤال

لقد قرأنا جميعًا المعايير ونعرف الحقائق - خوادم الشبكة غير المتزامنة القائمة على الأحداث أسرع من نظيراتها المترابطة.فكر في lighttpd أو Zeus vs.أباتشي أو IIS.لماذا هذا؟

هل كانت مفيدة؟

المحلول

وأعتقد الحدث مقرها مقابل موضوع مقرها ليست المسألة - وهو توصيل nonblocking تعدد I / O، مآخذ للاختيار، والحل مقابل حل ترابط التجمع

.

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

في حل ترابط التجمع لديك المواضيع الفردية التعامل مع كل اتصال، بحيث يصبح لديهم لتبادل الوقت لتبديل السياق والملتحقين كل واحد 'الاستماع'. في هذا الحل وحدة المعالجة المركزية + IO مكتب خدمات المشاريع هي في نفس thread- الذي يحصل على slice- الوقت حتى ينتهي بك الأمر في انتظار التقاط IO لإتمام لكل موضوع (منع) التي يمكن عادة أن يتم دون استخدام الوقت وحدة المعالجة المركزية.

وجوجل لعدم عرقلة IO لأكثر detail- ويمكنك غالبا تجد بعض المقارنات مقابل حمامات موضوع أيضا.

و(إذا كان أي شخص يمكن توضيح هذه النقاط، لا تتردد)

نصائح أخرى

التطبيقات التي تعتمد على الأحداث هي لا أسرع بطبيعتها.

من لماذا تعتبر الأحداث فكرة سيئة (للخوادم عالية التزامن):

We examine the claimed strengths of events over threads and show that the
weaknesses of threads are artifacts of specific threading implementations
and not inherent to the threading paradigm. As evidence, we present a
user-level thread package that scales to 100,000 threads and achieves
excellent performance in a web server.

كان هذا في عام 2003.من المؤكد أن حالة الترابط على أنظمة التشغيل الحديثة قد تحسنت منذ ذلك الحين.

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

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

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

بعض الأسئلة المهمة لمؤلف تطبيق الخادم الجديد:

  • كيف يتم أداء المواضيع على الأنظمة الأساسية التي تنوي دعمها اليوم؟هل سيكونون عنق الزجاجة لديك؟
  • إذا كنت لا تزال عالقًا في تنفيذ سلسلة رسائل سيئة:لماذا لا أحد إصلاح هذا؟

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

وبشكل صحيح تطوير تطبيقات الخادم أكثر تعقيدا في نموذج الحدث بشكل عام صعب جدا - تطبيقات الخيوط هي أسهل بكثير من الكتابة. قد يكون هذا هو العامل الحاسم وليس الأداء.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top