سؤال

لدي سؤال بخصوص تنفيذ PTHREAD على Linux.

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

أم أنه في الاتجاه الآخر ، يقوم هذا المجدول بجدولة كل مؤشر ترابط كما لو كانت عملية منفصلة.

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

المحلول

بالنسبة إلى Linux الحديثة (تنفيذ NPTL PTHREAD) ، ، يعتبر مؤشرات ترابط Scheduler Scheduler ، مؤشر ترابط "عملية الوزن الخفيفة". يتم تنفيذ pthread_create من حيث clone استدعاء النظام.

نصائح أخرى

يقوم Linux بجدولة كل مؤشر ترابط كما لو كانت عملية ذات نطاق مثل PTHREAD_SCOPE_SYSTEM. يمكن لتطبيق NPTL الاستفادة من وحدات المعالجة المركزية متعددة.

كما قال لوغان ، يتم جدولة كل موضوع بشكل مستقل.

ومع ذلك ، إذا كنت ترغب في استخدام مجموعات التحكم في عملية Linux لجدولة مجموعات من المواضيع بدلاً من ذلك.

تجعل مجموعات التحكم في العمليات الجدولة أكثر فعالية قليلاً ، ولكن يمكن أن تكون أكثر عدلاً.

الاستخدام الذي أصبح شائعًا جدًا هو وضع جميع العمليات والخيوط التي أنشأتها كل TTY في مجموعة تحكم لكل TTY. ينتج عن ذلك جميع تطبيقات المستخدم الرسومية التي يتم جدولةها في نفس مستوى ترجمة kernel من 24 الخيوط التي أطلقها في نافذة طرفية. تحصل التطبيقات الرسومية على 50 ٪ ويحصل التجميع على 50 ٪. إذا افتتح نافذة طرفية أخرى ويبدأ في تجميع GLIBC مع 24 خيوط أخرى ، فإنه ينتقل إلى 33 ٪ تطبيقات سطح المكتب ، و 33 ٪ ترجمة kernel و 33 ٪ تجميع GLIBC.

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