PowerShell / المتقدم: البعيد والأمان والحالة المطلوبة والموثوقية / الدرس 16
تحديد العمل الموازي وجمع الإكمال الحقيقي
افصل عمليات الخلفية ومهام الخيوط وrunspaces والأنابيب الموازية والمشترك والترتيب والنهائي.
في هذه الصفحة
أهداف الدرس
- شرح ميزات التوازي المحتاجة7 أو وحدات إضافية.
- حفظ هوية المهمة والحدود ودليل الإكمال.
- تجنب تعديل مشترك غير آمن وترتيب مفترض.
لآليات التوازي حدود عزل مختلفة
تختلف عملية الخلفية والخيط والبعيد وParallel بالعزل والتسلسل والذاكرة والفشل، ووثق وحدة الخيوط عند الحاجة. Parallel من7 لا5.1 ولا يكشف الاسم الحد. اختر للاستقلال والحجم والإلغاء والاعتماد والملكية لا لوجود ميزة أو طول التتابع. ويمكن أن تتطلب مهام الخيوط وحدة مستقلة أو تختلف عن عملية خلفية تسلسل القيم، لذلك ينبغي توثيق الآلية المختارة قبل تفسير أخطاء المشاركة.
حد التزامن ليس ميزانية موارد كاملة
تحد throttle نطاقاً وقد يطلق العامل أبناء أو يحتجز ذاكرة أو يثقل اعتماداً. حد المدخل والطابور أيضاً واحتفظ بالهوية؛ قد تسوء الزيادة مع قيد التالي. اثنان بالتعليم إعلان لا ضبط عام. لا ننفذ حملاً أو مهمة مضيف. وقد يظل المورد التالي أو الذاكرة هو الحد الفعلي رغم عدد العمال الصغير، لذا يلزم أيضاً تحديد حجم المدخل والطابور وملكية الإلغاء.
إبقاء الموازي مصطنعاً ونتائجه معرفة
يحول المثال أربع قيم ثم يفرز العرض؛ لا يضمن المصدر ترتيب النهاية وللفرز ذاكرة وكمون. يبقى غير منفذ فلا عوامل هنا. ليفحص المؤثر السلطة والتكرارية لكل عنصر؛ لا يصلح التوازي غير الآمن أو يجعل الإلغاء معاملة. ويضيف فرز النتائج بعد جمعها كلفة ذاكرة وكمون أول رد، فيجب أن يختار التصميم ضمان الترتيب عن قصد لا باعتباره مجانياً بعد التوازي.
1..4 | ForEach-Object -Parallel {
[pscustomobject]@{ Input = $_; Result = ($_ * 2) }
} -ThrottleLimit 2 | Sort-Object Input
المقصود1–4 إلى2 و4 و6 و8 دون اختبار الجدولة أو runspace أو الترتيب.
البدء والإكمال نتيجتان مختلفتان
لا يثبت الإطلاق الإنجاز أو كل عنصر. امتلك المعرف والانتظار والجمع والخطأ والمهلة والإلغاء والتنظيف وفسر النوع والأبناء. احفظ الجزئي بسياسة. يفحص النموذج جدولاً فقط؛ اختبر لاحقاً الفشل والانقطاع والتنظيف دون إنتاج. وقد تنتهي مهمة مع خرج جزئي أو خطأ في أحد أبنائها، لذلك لا يغني علم حالة واحد عن جمع النتائج المطلوبة وتفسير قنوات الفشل.
completed_out_of_order = [{'Input': 3, 'Result': 6}, {'Input': 1, 'Result': 2}, {'Input': 4, 'Result': 8}, {'Input': 2, 'Result': 4}]
ordered = sorted(completed_out_of_order, key=lambda row: row['Input'])
assert len({row['Input'] for row in ordered}) == 4
print(','.join(str(row['Result']) for row in ordered))
2,4,6,8
المثبت قائمة معلنة لا عمالاً أو زمناً ويفحص ترتيباً واحداً.
الأخطاء الشائعة وإصلاحها
افتراض ترتيب المصدر للنتائج الموازية
- لماذا يحدث؟
- اختلط المدخل والنهاية.
- كيف تصلحه؟
- احفظ الهوية ورتب عند الطلب.
- كيف تتجنب تكراره؟
- اختبر نهايات معاد ترتيبها.
تعديل قائمة مشتركة دون تنسيق
- لماذا يحدث؟
- اختلط الوصول بسلامة الخيوط.
- كيف تصلحه؟
- استخدم مستقلاً أو مزامنة مدعومة.
- كيف تتجنب تكراره؟
- راجع المشاركة حسب الآلية.
الإبلاغ عن الإطلاق إنجازاً
- لماذا يحدث؟
- أُهمل النهائي والجمع.
- كيف تصلحه؟
- امتلك واجمع المطلوب.
- كيف تتجنب تكراره؟
- اختبر المهلة والجزئي.
اختبر فهمك
1. لماذا قد تقل الإنتاجية بزيادة throttle؟
اعرض الحل المشروح
قد تتنافس الذاكرة والتالي فتزيد الطوابير والأخطاء؛ قس النجاح والكمون واحفظ التعافي المحدود.
2. ماذا يحفظ تجميع الأب لكل عامل؟
اعرض الحل المشروح
احفظ الهوية والحالة والخرج والفشل والتنظيف؛ لا يثبت عدد المطبوع كل المطلوب أو غياب مخفي.
أهم ما تعلمته
- اختر نموذج عزل معلناً وحد العمل.
- احفظ الهوية واجمع النهائي قبل القبول.