ما هي سرقة العمل؟

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

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

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

الفوائد والجوانب السلبية

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

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

تطبيقات

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

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

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

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

استنتاج

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