1. العديد من المفاهيم المهمة حول التزامن العالي
1.1 متزامن وغير متزامن
بادئ ذي بدء ، تشير المزامنة والمتزامنة المذكورة هنا إلى جوانب استدعاء الوظيفة/الطريقة.
من الواضح أن المكالمة المتزامنة ستنتظر إرجاع الطريقة ، وستعود مكالمة غير متزامنة على الفور ، ولكن المكالمة غير المتزامنة ستعود على الفور لا تعني أن مهمتك قد اكتملت. سيتم إعداد موضوع في الخلفية لمواصلة المهمة.
1.2 التزامن والتوازي
التزامن والتوازي متشابهان في المظهر الخارجي. كما هو مبين في الشكل ، فإن التوازي هو عندما يتم تنفيذ مهمتين في وقت واحد ، في حين أن التزامن هو القيام بمهمة واحدة في كل مرة ثم التبديل إلى مهمة أخرى. لذلك ، لا يمكن أن تكون وحدة المعالجة المركزية واحدة موازية ، يمكن أن تكون التزامن فقط.
1.3 منطقة حرجة
يتم استخدام المنطقة الحاسمة لتمثيل مورد عام أو بيانات مشتركة. يمكن استخدامه بواسطة مؤشرات ترابط متعددة ، ولكن يمكن لخيط واحد فقط استخدامه في وقت واحد. بمجرد احتلال مورد المنطقة الحرجة ، يجب أن تنتظر المواضيع الأخرى إذا أرادت استخدام هذا المورد.
1.4 الحظر وغير الحظر
عادةً ما يصف الحظر وغير المحظور التأثير المتبادل بين خيوط متعددة. على سبيل المثال ، إذا احتل مؤشر ترابط مورد المنطقة الحرجة ، فيجب أن تنتظر جميع المواضيع الأخرى التي تحتاج إلى هذا المورد في هذا المجال الحرجة ، وسوف يتسبب الانتظار في تعليق الخيط. هذا هو حظر. في هذا الوقت ، إذا كان الخيط الذي يحتل المورد غير مستعد لإصدار المورد ، فإن جميع المواضيع الأخرى التي تمنع في هذا المجال الحرجة لا يمكن أن تعمل.
لا يسمح عدم الحظر بمواضيع متعددة بدخول المنطقة الحرجة في نفس الوقت
لذلك ، فإن أداء الحظر ليس جيدًا بشكل عام. وفقًا للإحصاءات العامة ، إذا تم تعليق مؤشر ترابط على مستوى نظام التشغيل وجعل مفتاح سياق ، فإنه عادة ما يستغرق 80،000 دورة زمنية للقيام بذلك.
1.5 kutlock ، الجوع ، قفل مباشر
يشير ما يسمى بالموت إلى انسداد ناتج عن الموارد المتنافسة أو التواصل مع بعضها البعض أثناء عملية تنفيذ عمليتين أو أكثر. بدون قوى خارجية ، لن يكونوا قادرين على التقدم. في هذا الوقت ، يسمى النظام مسدودًا أو أن النظام لديه طريق مسدود. هذه العمليات التي تنتظر دائمًا لبعضها البعض تسمى عمليات Deadlock. تمامًا مثل السيارات الموجودة في الصورة أدناه ، تريد المضي قدمًا ، ولكن لا يمكن لأحد المضي قدمًا.
ومع ذلك ، على الرغم من أن Deadlock هو ظاهرة سيئة ، إلا أنها مشكلة ثابتة. بمجرد حدوث طريق مسدود ، تكون العملية عالقة ومعدل إشغال وحدة المعالجة المركزية هو أيضًا 0. لن يشغل وحدة المعالجة المركزية ، وسيتم استدعاؤها. نسبيا ، من السهل نسبيا اكتشاف وتحليل.
المقابل للقتال هو القفل المباشر.
Live Lock يعني أن الأشياء 1 يمكنها استخدام الموارد ، ولكنها تتيح لأشياء أخرى استخدام الموارد أولاً ؛ يمكن للأشياء 2 استخدام الموارد ، ولكنها تتيح أيضًا لأشياء أخرى استخدام الموارد أولاً ، لذلك كان كلاهما متواضعًا ولا يمكنه استخدام الموارد.
على سبيل المثال ، يبدو الأمر كما لو كنت تقابل شخصًا ما في الشارع ، والذي يصادف أنه يسير في الاتجاه المعاكس لك ويقابلك وجهاً لوجه ، فأنت تريد جميعًا أن تدع بعضكما البعض يذهبون. انتقلت إلى اليسار ، وانتقل إلى اليسار ، لكن الاثنين لا يزالان لا يستطيعان الذهاب إلى هناك. في هذا الوقت ، تنتقل إلى اليمين وانتقل إلى اليمين ، وتستمر بهذه الطريقة.
عندما يحصل مؤشر ترابط على مورد ، يجد أن المواضيع الأخرى تفكر أيضًا في هذا المورد لأنها لم تحصل على جميع الموارد ، لذلك لتجنب المميتة ، فإنها تتخلى عن جميع الموارد التي يحتفظون بها. إذا قام مؤشر ترابط آخر بنفس الشيء ، فإنهم يحتاجون إلى نفس الموارد ، مثل A يحمل موردًا ، ويحمل B مورد B ، وبعد التخلي عن المورد ، يحصل A على مورد B ، ويحصل B على مورد ، ويتم تكرار ذلك ، يحدث قفل مباشر.
من الصعب اكتشاف الأقفال الحية من Deadlocks ، لأن الأقفال الحية هي عملية ديناميكية.
الجوع يعني أن خيوط واحدة أو أكثر لا يمكنها الحصول على الموارد المطلوبة لأسباب مختلفة ، مما يجعلها غير قادرة على التنفيذ.
1.6 مستوى التزامن
مستويات التزامن: الحظر وغير المحظور (ينقسم عدم الحظر إلى خالية من الحاجز وخالية من القفل وخالية من الانتظار)
1.6.1 الحظر
عندما يدخل مؤشر ترابط واحد إلى القسم الحرج ، يجب أن تنتظر مؤشرات الترابط الأخرى
1.6.2 إمكانية الوصول
بالمقارنة مع جدولة عدم الحظر ، فإن جدولة الحظر هي استراتيجية متشائمة ، والتي تعتقد أن تعديل البيانات معًا من المحتمل أن يجعل البيانات سيئة. بدلاً من منع الجدولة ، إنها استراتيجية متفائلة ، والتي تعتقد أن تعديل البيانات قد لا يجعل البيانات سيئة بالضرورة. ومع ذلك ، فهي استراتيجية للدخول الواسع والخروج الصارم. عندما تجد أن عملية ما لديها منافسة للبيانات وتتعارض في المنطقة الحرجة ، فإن طريقة الجدولة الخالية من العوائق ستعيد البيانات.
في طريقة الجدولة الخالية من العوائق ، تعادل جميع مؤشرات الترابط لالتقاط لقطة للنظام. سيستمرون في محاولة أخذ اللقطات حتى تصبح صالحة.
1.6.3 قفل
يمكن الوصول إليه
تأكد من وجود موضوع يمكنه الفوز
بالمقارنة مع إمكانية الوصول ، لا تضمن إمكانية الوصول أنه يمكن إكمال العمليات عندما تكون هناك منافسة ، لأنه إذا وجدت تعارضات في كل عملية ، فستستمر في المحاولة. إذا كانت الخيوط في المنطقة الحرجة تتداخل مع بعضها البعض ، فسوف يتسبب ذلك في تعليق جميع المواضيع في المنطقة الحرجة ، ثم سيكون لأداء النظام تأثير كبير.
يضيف Lockless حالة جديدة للتأكد من أن مؤشر ترابط واحد يمكنه الفوز بكل منافسة ، مما يحل مشكلة الثقة في الحاجز. على الأقل يضمن تنفيذ جميع المواضيع بسلاسة.
الرمز التالي هو رمز حساب خالي من القفل في جافا
Lockless أمر شائع في Java
بينما (! atomicvar.compareanset (localvar ، localvar+1)) {localvar = atomicvar.get () ؛ }1.6.4 لا انتظار
قفل
يجب إكمال جميع المواضيع في خطوة محدودة
لا جوع
بادئ ذي بدء ، فرضية عدم الانتظار على أساس خالية من القفل. لا يضمن القفل إلا أنه يجب أن يكون هناك دخول وخروج في المنطقة الحرجة. ومع ذلك ، إذا كانت أولوية الدخول عالية جدًا ، فقد تكون بعض الخيوط ذات الأولوية المنخفضة في المنطقة الحرجة جائعة ولا يمكنها مغادرة المنطقة الحرجة. ثم لا يوجد انتظار لحل هذه المشكلة ، مما يضمن إكمال جميع الخيوط في خطوة محدودة ، وبطبيعة الحال لا يوجد جوع.
لا يوجد انتظار هو أعلى مستوى من التوازي ، والذي يمكن أن يمكّن هذا النظام من الوصول إلى الحالة المثلى.
حالات نموذجية دون انتظار:
إذا لم يكن هناك فقط مؤشرات الترابط القراءة وليس لمصطلحات مؤشرات الترابط ، فيجب أن يكون هذا بدون انتظار.
إذا كان هناك كلا من مؤشرات ترابط القراءة والكتابة ، وقبل كل مؤشر ترابط الكتابة ، قم بنسخ البيانات ثم قم بتعديل النسخة بدلاً من تعديل البيانات الأصلية ، لأنه لا يوجد تعارض في تعديل النسخة ، فإن عملية التعديل هي أيضًا دون انتظار. التزامن النهائي هو فقط الكتابة فوق البيانات المكتوبة.
نظرًا لأن المتطلبات الخالية من الانتظار مرتفع نسبيًا ومن الصعب تنفيذها ، فسيتم استخدام قفل على نطاق أوسع.
2. قانونان مهمان على التوازي
يرتبط كلا القانونين بنسبة التسارع
2.1 قانون أمدال
تحديد صيغة الحساب والحد العلوي النظري لنسبة التسارع بعد التوازي للأنظمة التسلسلية
تعريف نسبة التسارع: نسبة التسارع = وقت استهلاك الوقت قبل التحسين / النظام المستهلكة بعد التحسين
على سبيل المثال:
نسبة التسارع = وقت استهلاك الوقت قبل التحسين / النظام المستهلكة بعد التحسين = 500/400 = 1.25
توضح هذه النظرية أن زيادة عدد معالجات وحدة المعالجة المركزية لا تلعب بالضرورة دورًا فعالًا في زيادة نسبة الوحدات الموازية في النظام. فقط عن طريق زيادة عدد المعالجات المتوازية ، يمكن الحصول على أقصى نسبة تسريع مع أصغر استثمار.
2.2 قانون غوستافسون
اشرح العلاقة بين عدد المعالجات ونسبة التسلسل ونسبة التسارع
ثم يتم حذف نسبة التسارع = NF (N-1) // عملية الاشتقاق
طالما أن هناك موازاة كافية ، فإن نسبة التسارع تتناسب مع عدد وحدات المعالجة المركزية.