كيف يمكن تطبيق استخدام النوى متعددة أو وحدات .صافي أو جافا ؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

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

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

المحلول

إذا كنت تستخدم خيوط متعددة, نظام التشغيل تلقائيا تعتني باستخدام متعددة النوى.

نصائح أخرى

هل هناك طريقة اختيار المعالج أو الأساسية إطلاقه ؟

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

  • تشغيل إدارة المهام
  • العثور على في Processes نافذة.
  • انقر بزر الماوس الأيمن ثم اختر Set Affinity...
  • حدد مربعات الاختيار بجوار وحدة المعالجة المركزية تريد السماح التطبيق الخاص بك لتشغيل.Windows ثم فقط جدول المواضيع من هذه العملية على أولئك خاصة وحدة المعالجة المركزية

إذا كنت أتذكر بشكل صحيح ، ويندوز 'تذكر' هذه الإعدادات لاحقا أضعاف عملية تشغيل, ولكن من فضلك لا اقتبس لي على ذلك - تشغيل بعض الاختبارات نفسك :-)

يمكنك أيضا القيام بذلك برمجيا في .صافي بعد البرنامج أطلقت باستخدام باستخدام النظام.تشخيص.العملية.ProcessorAffinity الملكية, ولكن أنا لا أعتقد أنه سوف 'تذكر' إعدادات, لذلك سيكون هناك دائما فترة قصيرة في التطبيق الخاص بك يتم تشغيل على أي وحدة المعالجة المركزية ويندوز يراه مناسبا.أنا لا أعرف كيفية القيام بذلك في جافا آسف.

ملاحظة:

وهذا ينطبق على العملية برمتها المستوى.إذا قمت بتعيين تقارب CPU0 فقط ، ومن ثم إطلاق 50 المواضيع كل 50 من هذه المواضيع سوف تعمل على CPU0 ، CPU1, 2, 3, الخ الجلوس حول عدم القيام بأي شيء.

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


أما بالنسبة 'الذاكرة المشتركة' نموذج يعمل نفس الشيء ، ولكن هناك المزيد من الأشياء التي يمكن أن تذهب بمهارة خطأ عند تشغيل التطبيق على وحدة المعالجة المركزية متعددة بدلا من مجرد timeslices على واحد.

من أجل فتح العين على سبيل المثال, قراءة هذا ridiculousfish المقالة عن وحدة المعالجة المركزية و الذاكرة الحواجز.

إنها تهدف إلى OSX التنمية على PowerPC ، ولكن العامة بما فيه الكفاية التي يجب أن تطبق في كل مكان.IMHO انها واحدة من العشرة الأوائل 'جميع المطورين يجب قراءة هذه المقالات التي قرأتها.

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

أن يقال, يمكنك تعيين المواضيع الأولويات إذا كان لديك مهمة حرجة ، خيوط API عادة ما يوفر هذه الإمكانية.انظر API جافا على سبيل المثال: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html#setPriority(int)

PS:هناك شيء كسر في تحليل المحرك ...كان لي أن أضيف الرابط أعلاه كما نص عادي

وأود أن ننظر في موازاة ملحقات .NET framework.فإنه لا يزال في CTP, ومع ذلك فإنه من المفترض أن جعل أفضل استخدام متعدد المعالجات.أسهل مكان للبدء ل .صافي على موازية فرق بلوق.

أما بالنسبة جافا ليس لدي أي فكرة.

لقد استخدمت هذا في بضع البرامج لأن بلدي الأساسية 0 وقد خرب.

// Programmatically set process affinity
var process = System.Diagnostics.Process.GetCurrentProcess();

// Set Core 0
process.ProcessorAffinity = new IntPtr(0x0001);

أو

// Set Core 1
process.ProcessorAffinity = new IntPtr(0x0002);

المزيد عن هذا في "العملية.ProcessorAffinity الملكية".

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