سؤال

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

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

المحلول

تتميز الخيوط بخفة الوزن، ولإنشاء العديد من "العمال" فقط للاستفادة من جميع وحدات المعالجة المركزية أو النوى المتاحة، فأنت أفضل باستخدام الخيوط.

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

نصائح أخرى

العمليات لديها ذاكرة أكثر عزلة.وهذا أمر مهم لعدد من الأسباب:

  • من الصعب أن تؤدي مهمة واحدة إلى تعطل المهام الأخرى.
  • سيتم توفير المزيد من الذاكرة لكل عملية.يعد هذا أمرًا مهمًا للتطبيقات الكبيرة وعالية الأداء مثل Apache أو خوادم قواعد البيانات، مثل Postgres.يعد هذا أمرًا مهمًا لكل من الذاكرة المخصصة وملفات الذاكرة المعينة.

تعتمد درجة التوازي بشكل أساسي على المعالجات / النوى المادية المتوفرة على جهازك.إذا كان لديك جهاز ذو معالج واحد/جهاز أساسي، فإن وجود عمليات منفصلة قد يسبب الكثير من الحمل.سيتم تفضيل المواضيع بشكل عام في هذه الحالة.

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

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

بشكل عام، يجب عليك استخدام العمليات عندما لا تحتاج تدفقات التنفيذ الفردية إلى مشاركة البيانات العالمية وترغب في حماية كل منها من الآخر.

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

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