تعدد العمليات في C #: الفوائد والأساسيات وأفضل الممارسات

نشرت: 2023-06-01

جدول المحتويات

ما هي البرمجة متعددة الخيوط

يعد Multithreading مفهومًا أساسيًا في هندسة البرمجيات. في C # ، تعد البرمجة متعددة مؤشرات الترابط ضرورية لمطوري البرامج الذين يعملون مع .NET Framework. يستخدم المطورون على نطاق واسع تعدد مؤشرات الترابط في C # لأنه يسمح لهم بإنشاء تطبيقات معقدة وسريعة الاستجابة بكفاءة.

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

فوائد ومزايا البرمجة متعددة مؤشرات الترابط

عند تنفيذه في وقت واحد ، يعمل تعدد مؤشرات الترابط على تحسين فعالية التطبيقات. تشمل الفوائد الأكثر شيوعًا لخيط C # ما يلي:

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

أولاً ، يؤثر على الكائنات الفردية التي يمكن مزامنتها. ثانيًا ، يمكن استخدامه مع فئة System.Threading و Interlocked.

المفاهيم الأساسية لتعدد مؤشرات الترابط في C #

يتيح Multithreading للمستخدمين القيام بمهام متعددة في وقت واحد بمساعدة نوى المعالج المتعددة. فيما يلي المفاهيم الأساسية المستخدمة في تعدد مؤشرات الترابط:

  • الخيوط: الخيوط هي الوحدات الأساسية في تعدد مؤشرات الترابط التي تساعد في تنفيذ العملية.هذه هي مسارات التنفيذ داخل برنامج معين يمكن تشغيلها بشكل متزامن مع سلاسل العمليات الأخرى.

في C # ، يمكننا العثور على نوعين من الخيوط ، وهما مؤشرات الترابط الأمامية والخلفية. تتضمن فئة مؤشر الترابط المتوسط ​​اسمًا وأولوية و isAlive و ThreadState و Start () و Suspend () و Resume () و Join ().

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

إنشاء وتشغيل المواضيع

يمكن أن يكون الإنشاء والتشغيل أسهل مع هذه الأمثلة. فيما يلي مثال على تعدد مؤشرات C # :

باستخدام النظام ؛

باستخدام System.Threading.

برنامج الفصل {

فراغ ثابت رئيسي () {

int workerIndex = 0 ؛

thread workerThread = خيط جديد (ThreadStart جديد (عامل))؛

workerThread.Start () ؛

لـ (int mainIndex = 1؛ mainIndex <= 10؛ mainIndex ++) {

Console.WriteLine (“الخيط الرئيسي: {0}”، mainIndex)؛

خيط النوم (200) ؛

}

workerThread.Join () ؛

}

عامل الفراغ الثابت () {

لـ (int workerIndex = 1؛ workerIndex <= 10؛ workerIndex ++) {

Console.WriteLine (“خيط العامل: {0}”، workerIndex * 2)؛

خيط النوم (200) ؛

}

}

}

انتاج:

الخيط الرئيسي: 1

خيط العامل: 2

الخيط الرئيسي: 2

خيط العامل: 4

الخيط الرئيسي: 3

خيط العامل: 6

الخيط الرئيسي: 4

خيط العامل: 8

الخيط الرئيسي: 5

خيط العامل: 10

الخيط الرئيسي: 6

الخيط العامل: 12

الخيط الرئيسي: 7

خيط العامل: 14

الخيط الرئيسي: 8

الخيط العامل: 16

الخيط الرئيسي: 9

خيط العامل: 18

الخيط الرئيسي: 10

خيط العامل: 20

Explanation: في هذا الإخراج ، يعمل كلا الخيطين بشكل متزامن لطباعة الأرقام من 1 إلى 10 ومن 2 إلى 20 ، والأخيرة تضاعف من فهرس الحلقة.في هذا المثال ، تم استخدام طريقة سكون مؤشر الترابط C # (Thread.Sleep).

بنفس الطريقة ، سننظر في مثال آخر لخيط C # باستخدام الخيط الأمامي:

باستخدام النظام ؛

باستخدام System.Threading.

برنامج الفصل {

فراغ ثابت رئيسي () {

خيط myThread = خيط جديد (عامل) ؛

myThread.Start () ،

Console.WriteLine (“الموضوع الرئيسي: بدأ”) ؛

لـ (int i = 1 ؛ i <= 5 ؛ i ++) {

Console.WriteLine (“Main Thread: Count {0}”، i)؛

الخيط. النوم (500) ؛

}

Console.WriteLine (“الخيط الرئيسي: انتهى”) ؛

}

عامل الفراغ الثابت () {

لـ (في j = 1 ؛ j <= 5 ؛ j ++) {

Console.WriteLine (“Worker Thread: Count {0}”، j * 3)؛

خيط النوم (750) ؛

}

Console.WriteLine (“خيط العامل: انتهى”) ؛

}

}

انتاج:

الموضوع الرئيسي: بدأ

خيط العامل: العد 3

الموضوع الرئيسي: العد 1

خيط العامل: العد 6

الموضوع الرئيسي: العد 2

خيط العامل: العد 9

الموضوع الرئيسي: العد 3

خيط العامل: العد 12

الموضوع الرئيسي: العد 4

خيط العامل: العد 15

الموضوع الرئيسي: العد 5

عامل الموضوع: انتهى

الموضوع الرئيسي: انتهى

Explanation: يوضح هذا الإخراج كيفية عمل الخيطين في نفس الوقت.نظرًا لأن الخيوط الرئيسية والخلفية تعمل بالتوازي ، فإن الخيط الرئيسي يطبع الأرقام من 1 إلى 5. يطبع مؤشر ترابط العامل مضاعفات 3 إلى 15.

تحقق من دورات تطوير البرمجيات في upGrad لتحسين المهارات.

اقرأ مقالاتنا الشهيرة المتعلقة بتطوير البرمجيات

لماذا تعلم البرمجة؟ كيف تتعلم البرمجة؟ كيفية تثبيت إصدار معين من حزمة NPM؟ أنواع الوراثة في لغة ++ C ما الذي يجب أن تعرفه؟

التزامن

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

في C # ، يتم ذلك باستخدام أساسيات المزامنة مثل الكلمة الأساسية للقفل ، وكائنات المزامنة ، والفئة المتشابكة.

فيما يلي مثال على مزامنة مؤشر ترابط C # :

باستخدام النظام ؛

باستخدام النظام.

فئة TablePrinter

{

PrintTable العام الفارغ ()

{

قفل (هذا)

{

لـ (int i = 3 ؛ i <= 8 ؛ i ++)

{

خيط النوم (200) ؛

Console.WriteLine (أنا * 5) ؛

}

}

}

}

برنامج الفصل

{

فراغ ثابت عام رئيسي (سلسلة [] وسائط)

{

TablePrinter tp = new TablePrinter () ؛

موضوع t1 = خيط جديد (ThreadStart جديد (tp.PrintTable)) ؛

موضوع t2 = خيط جديد (ThreadStart جديد (tp.PrintTable)) ؛

t1.Start () ؛

t2.Start () ؛

}

}

انتاج:

15

20

25

30

35

40

45

50

55

60

استكشف دوراتنا المجانية في تطوير البرمجيات

أساسيات الحوسبة السحابية أساسيات JavaScript من البداية هياكل البيانات والخوارزميات
تقنية Blockchain رد فعل للمبتدئين أساسيات Java الأساسية
جافا Node.js للمبتدئين جافا سكريبت متقدم

الجمود

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

على سبيل المثال ، إذا كان مؤشر الترابط A لديه قفل على المورد 1 وينتظر الوصول إلى المورد 2 بينما ينتظر مؤشر الترابط B المورد 1 ، يمكن أن يؤدي إلى حالة توقف تام.

وفيما يلي مثال على ذلك:

باستخدام النظام ؛

باستخدام System.Threading.

طريق مسدود لمساحة الاسم

{

مثال فئة عامة

{

firstLock ثابت للقراءة فقط = كائن جديد () ؛

secondLock للكائن الثابت للقراءة فقط = new object () ؛

وظيفة الفراغ الثابت ()

{

Console.WriteLine ("\ t \ t \ t \ tLocking firstLock") ؛

قفل (أول قفل)

{

Console.WriteLine ("\ t \ t \ t \ t مؤمن firstLock") ؛

الخيط. النوم (1500) ؛

Console.WriteLine ("\ t \ t \ t \ tLocking secondLock") ؛

قفل (قفل ثاني)

{

Console.WriteLine ("\ t \ t \ t \ t Locked secondLock") ؛

}

Console.WriteLine ("\ t \ t \ t \ t إصدار SecondLock") ؛

}

Console.WriteLine ("\ t \ t \ t \ t تم إصدار firstLock") ؛

}

فراغ ثابت رئيسي ()

{

موضوع جديد (ThreadStart جديد (ThreadJob)). Start () ؛

خيط النوم (1000) ؛

Console.WriteLine (“تأمين SecondLock”) ؛

قفل (قفل ثاني)

{

Console.WriteLine (“Locked secondLock”) ؛

Console.WriteLine ("تأمين firstLock") ؛

قفل (أول قفل)

{

Console.WriteLine (“Locked firstLock”) ؛

}

Console.WriteLine (“تم إصدار firstLock”) ؛

}

Console.WriteLine (“تم إصدار SecondLock”) ؛

Console.Read () ؛

}

}

}

انتاج:

تأمين الثانية

تأمين ثاني

تأمين firstLock

مقفل firstLock

تم إصدار firstLock

تم إصدار SecondLock

مهارات تطوير البرمجيات عند الطلب

دورات جافا سكريبت دورات جافا الأساسية دورات هياكل البيانات
دورات Node.js دورات SQL دورات تطوير مكدس كاملة
دورات NFT دورات DevOps دورات البيانات الضخمة
دورات React.js دورات الأمن السيبراني دورات الحوسبة السحابية
دورات تصميم قواعد البيانات دورات بايثون دورات العملات المشفرة

برك الموضوع

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

يعتني مدير تجمع مؤشرات الترابط بتجمع مؤشرات الترابط ، حيث يكون مسؤولاً عن إنشاء سلاسل الرسائل وتدميرها وجدولتها.

فيما يلي مثال على تجمع مؤشرات الترابط باستخدام TPL (مكتبة المهام المتوازية):

باستخدام النظام ؛

باستخدام System.Threading.Tasks ؛

برنامج الفصل

{

فراغ ثابت رئيسي ()

{

مهمة <سلسلة> مهمة = Task.Factory.StartNew <سلسلة>

(() => DownloadString (“http://www.example.com/”)) ؛

نتيجة السلسلة = مهمة.

Console.WriteLine (نتيجة) ؛

Console.Read () ؛

}

سلسلة تنزيل ثابتة (سلسلة uri)

{

باستخدام (var wc = new System.Net.WebClient ())

إرجاع wc.DownloadString (uri) ؛

}

انتاج:

يعتمد الإخراج على المحتويات المتوفرة على صفحة الويب. سيضمن هذا البرنامج تنزيل المحتويات من صفحة الويب من عنوان URL المحدد. ثم ستطبعها.

البرمجة غير المتزامنة مع مكتبة المهام المتوازية (TPL)

مكتبة المهام المتوازية (TPL) هي أداة قوية للتعامل مع APIS والأنواع العامة. يتعامل مع System.Threading و System.Threading.Tasks .

يوفر .NET Framework 4 واجهات برمجة تطبيقات على مستوى اللغة والإطار للمطورين بهدف كتابة تعليمات برمجية متوازية. بمساعدة TPL ، تسمح البرمجة غير المتزامنة للبرامج بالعمل دون حجب الخيط الرئيسي.

فيما يلي مثال على البرمجة غير المتزامنة مع TPL:

المهمة <string> task = Task.Factory.StartNew <string> (() => {

إرجاع "النتيجة" ؛

}) ؛

نتيجة السلسلة = مهمة.

مهمة غير متزامنة MyMethod () {

نتيجة السلسلة = مهمة انتظار ؛

}

تحقق مندوراتنا التكنولوجية المجانية لتتفوق على المنافسة.

أفضل الممارسات لتعدد مؤشرات الترابط في C #

يمكن أن يكون تعدد العمليات موفرًا للوقت من حيث الأداء وتعدد المهام. لمعرفة المزيد حول كيفية عمل multithreading ، يمكنك اختيار ماجستير العلوم في علوم الكمبيوتر من جامعة جون مورس بليفربول .

فيما يلي بعض أفضل الممارسات لمساعدة المستخدمين على توفير الوقت وتسجيل أعلى كفاءة.

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

استكشف دوراتنا التدريبية الشهيرة في هندسة البرمجيات

ماجستير العلوم في علوم الكمبيوتر من جامعة جون مورس بليفربول و IIITB برنامج شهادة الأمن السيبراني من معهد كاليفورنيا للتكنولوجيا CTME
برنامج تدريب تطوير المكدس الكامل برنامج PG في Blockchain
برنامج PG التنفيذي في تطوير Full Stack
عرض جميع دوراتنا أدناه
دورات هندسة البرمجيات

خاتمة

يظل تعدد مؤشرات الترابط في C # مفهومًا أساسيًا مع نموذج الكفاءة العالية في العمل. يوفر طريقة مرنة للمبرمجين لتقسيم عبء عمل البرنامج إلى مهام متعددة تعمل بشكل متزامن ومستقل.

على الرغم من أن تعدد مؤشرات الترابط يمكن أن يكون مفيدًا للغاية ، إلا أنه يمكن أن يؤدي إلى عقبات محتملة إذا لم يتم تنفيذها بعناية.

مع الميزانية العالمية لبرامج المغامرة التي تجاوزت 856 مليار دولار بين 2009-2023 ، يعد تطوير البرمجيات بمهنة مشرقة للمطورين.

تقدم الآن بطلب للحصول على برنامج Full Stack Software Development Bootcamp من upGrad ! يمكن أن تكون دورة تطوير المكدس الكاملة نقطة انطلاق للمطورين الذين يرغبون في إطلاق العنان لإمكاناتهم في علوم الكمبيوتر.

1. ما هي البرمجة متعددة مؤشرات الترابط؟

البرمجة متعددة مؤشرات الترابط هي عملية تتضمن تنفيذ برامج باستخدام خيوط متعددة في نفس الوقت. تمكن المستخدمين في الواجهة الأمامية من استخدام نسخ متعددة من البرنامج قيد التشغيل على الكمبيوتر دون انقطاع.

2. ما هو الفرق الأساسي بين الخيط والعملية؟

تتضمن العملية عادةً برنامجًا في حالة التنفيذ ، بينما يتكون مؤشر الترابط من عملية داخل عملية فرعية.

3. ما هو الفرق بين الموضوع والمهمة في C #؟

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