مثير للإعجاب

مقدمة إلى الترابط في VB.NET

مقدمة إلى الترابط في VB.NET

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

تعريف الخيط

الخيط عبارة عن تدفق تحكم تسلسلي واحد.

بعض التصفيات:

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

هذه هي الأشياء على مستوى التجميع ، ولكن هذا ما تحصل عليه عندما تبدأ التفكير في المواضيع.

Multithreading مقابل المعالجة المتعددة

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

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

ممارسة سلامة الموضوع

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

إذا افتقدت عداد الحلقة "I" الرقم 7 بشكل غير متوقع وذهب من 6 إلى 8 - ولكن بعض الوقت فقط - سيكون له آثار كارثية على كل ما تفعله الحلقة. منع مثل هذه المشاكل يسمى سلامة الموضوع. إذا احتاج البرنامج إلى نتيجة عملية واحدة في عملية لاحقة ، فيمكن أن يكون من المستحيل ترميز العمليات أو الخيوط المتوازية للقيام بذلك.

عمليات تعدد العمليات الأساسية

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

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

في هذا التطبيق ، كان من الممكن أن ننفذ Sub من خلال الاتصال به:

هذا من شأنه أن ينفذ التطبيق بأكمله في المسلسل. المثال التعليمات البرمجية الأول أعلاه ، ومع ذلك ، يبدأ تشغيل روتين TestMultiThreading ومن ثم يستمر.

مثال خوارزمية متكررة

إليك تطبيق متعدد مؤشرات ترابط يتضمن حساب التباديل لصفيف باستخدام خوارزمية متكررة. ليس كل رمز يظهر هنا. مجموعة الأحرف التي يتم تجفيرها هي ببساطة "1" و "2" و "3" و "4" و "5." إليك الجزء ذو الصلة من الكود.

لاحظ أن هناك طريقتان للاتصال بـ Permute sub (علق كلاهما في الكود أعلاه). واحد ينطلق من موضوع والآخر يسميها مباشرة. إذا اتصلت به مباشرةً ، فستحصل على:

ومع ذلك ، إذا قمت ببدء تشغيل مؤشر ترابط وبدء تشغيل Permute الفرعي بدلاً من ذلك ، فستحصل على:

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

مثال حالة السباق

ذكر الجزء الأول من هذه المقالة حالة السباق. إليك مثال يوضحها مباشرةً:

أظهرت النافذة الفورية هذه النتيجة في تجربة واحدة. كانت التجارب الأخرى مختلفة. هذا هو جوهر حالة السباق.