مقدمة خيوط في Visual Basic

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

تعريف الخيط

الخيط هو تدفق تسلسلي واحد للتحكم.

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

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

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

instagram viewer

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

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

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

ممارسة سلامة الخيط

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

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

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

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

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

في هذا التطبيق ، كان بإمكاننا تنفيذ Sub الفرعية ببساطة عن طريق تسميته:

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

مثال الخوارزمية العودية

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

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

ومع ذلك ، إذا بدأت سلسلة محادثات وبدأت تشغيل Permute الفرعي بدلاً من ذلك ، فستحصل على:

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

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

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

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

instagram story viewer