برمجة متقدمة سي شارب المعالجة المتوازية المتعددة ثريد C# Multithreading
المعالجة المتوازية المتعددة C# - Multithreading
المعالجة المتوازية المتعددة ثريد C# Multithreading |
المعالجة المتوازية المتعددة C# Multithreading
ماهو thread او التمرير او المسار المعاجة المجزئة ؟
يعرف بأنه مسار تنفيذ البرنامج. يحدد كل مسار فريد تدفق من التحكم. إذا كان التطبيق الخاص بك معقدة ويستهلك وقتا في المعالجة فأن الحل هو استخدام المعاجة المتعددة بحيث إعطاء كل وظيفة متكاملة في برنامجك مسار أي ثريد فيتم معالجة البرنامج الى عدة مسارات ومعالجات متوازية وفي حال حدوث اي خلال في معالجة وحدة وظيفية فانه لا يؤثر على عمل البرنامج ككل.
في الصورة التالية توضح لك ماهو المعالجة المتعددة وففي المثال لدينا برنامج واحد فقط شغال من متصفح جوجل كروم ولس ان البرنامج مشغل أكثر من مرة حيث يظهر تكرار الاسم فان التكرار هو عبارة عن ثريد thread فكل واحد ثمثل مسار معالجة فمثلا لو حدث خللل في واحدة فلن يؤثر على الباقي وهنا كل مسار عبارة عن صفحة لموقع او إضافة plugin هذا هو الثريد.
المعالجة المتوازية المتعددة ثريد C# Multithreading |
مميزات المعالجة المتوازية للمسارات او الثريد
- تقلل من الاستهلاك للمعالج
- تزيد من كفاءة التطبيق
دورة حياة المعالجة المتعددة المتوازية المسارات Thread Life Cycle
عند استخدام المعالجة المتعددة يتم انشاء كائن من الفئة thread وينتهي الكائن بانتهاء المعالجة.
التالي هو جميع الحالات في دورة المعالجة المتوازية
التالي هو جميع الحالات في دورة المعالجة المتوازية
- Unstarted State في هذه الحالة ثم انشاء كائن المعالجة ولكن لم يتم استدعاء الدالة التي تبداء بالثريد او معالجة المسار.
- Ready State وفي هذه الحالة يتم تجهيز المعالجة للبرنامج ويتم ارساله الى دورة المعالجة للبدء.
- Not Runnable State وفي هذه الحالة تكون الثريد غير قابلة للتشغيل في الحالات التالية
- ثم استدعاء دالة sleep
- ثم استدعاء دالة الانتظار wait
- ثم اغلاق المعالجة بواسطة مشغل المدخل والخارج i/o
- Dead State حالة الانهاء يتم استدعاءها عند الانتهاء من تنفيذ البرنامج بالكامل او عند الغاء العملية.
المسار الرئيسي Main Thread
يتم استخدام المعالجة الرئيسية وهي او شي يتم تنفيذه في المعالجة المتوازية وهو اوما يتم عنده بدء المعالجة بالمسارات المتعددة وهو يتحكم في المعالجة للتطبيقك وتقوم السي شارب تلقاائيا بتكوينه.
مثال على المسار الرئيسي
using System; using System.Threading; namespace MultithreadingApplication { class MainThreadProgram { static void Main(string[] args) { Thread th = Thread.CurrentThread; th.Name = "MainThread"; Console.WriteLine("This is {0}", th.Name); Console.ReadKey(); } } }
ناتج المثال.
This is MainThread
إنشاء معالجة متوازية Creating Threads
باستخدام الدالة start نبداء المعالجة المتوازية
using System; using System.Threading; namespace MultithreadingApplication { class ThreadCreationProgram { public static void CallToChildThread() { Console.WriteLine("Child thread starts"); } static void Main(string[] args) { ThreadStart childref = new ThreadStart(CallToChildThread); Console.WriteLine("In Main: Creating the Child thread"); Thread childThread = new Thread(childref); childThread.Start(); Console.ReadKey(); } } }
ناتج كود انشاء المعالجة المتوازية اوالمسارات
In Main: Creating the Child thread Child thread starts
Managing Threadsإدارة المعالجة المتوازية
sleep() الدالة تستخدم في ايقاف المعالجة لفترة من الزمن.
using System; using System.Threading; namespace MultithreadingApplication { class ThreadCreationProgram { public static void CallToChildThread() { Console.WriteLine("Child thread starts"); // the thread is paused for 5000 milliseconds int sleepfor = 5000; Console.WriteLine("Child Thread Paused for {0} seconds", sleepfor / 1000); Thread.Sleep(sleepfor); Console.WriteLine("Child thread resumes"); } static void Main(string[] args) { ThreadStart childref = new ThreadStart(CallToChildThread); Console.WriteLine("In Main: Creating the Child thread"); Thread childThread = new Thread(childref); childThread.Start(); Console.ReadKey(); } } }
ناتج كود معالجة المسارات اوالثريد
In Main: Creating the Child thread Child thread starts Child Thread Paused for 5 seconds Child thread resumes
انهاء المعالجة المساراتDestroying Threads
Abort() تستخدم الدالة لانهاء المعالجة المتعددة
ThreadAbortException. من خلال القاء اسثتناء
using System; using System.Threading; namespace MultithreadingApplication { class ThreadCreationProgram { public static void CallToChildThread() { try { Console.WriteLine("Child thread starts"); // do some work, like counting to 10 for (int counter = 0; counter <= 10; counter++) { Thread.Sleep(500); Console.WriteLine(counter); } Console.WriteLine("Child Thread Completed"); } catch (ThreadAbortException e) { Console.WriteLine("Thread Abort Exception"); } finally { Console.WriteLine("Couldn't catch the Thread Exception"); } } static void Main(string[] args) { ThreadStart childref = new ThreadStart(CallToChildThread); Console.WriteLine("In Main: Creating the Child thread"); Thread childThread = new Thread(childref); childThread.Start(); //stop the main thread for some time Thread.Sleep(2000); //now abort the child Console.WriteLine("In Main: Aborting the Child thread"); childThread.Abort(); Console.ReadKey(); } } }
ناتج كود تدمير المعالجة المتوازية
In Main: Creating the Child thread Child thread starts 0 1 2 In Main: Aborting the Child thread Thread Abort Exception Couldn't catch the Thread Exception
لمتابعتي
تويتر: @aalmahallawi
facebook: SEO Business Marketing
IT Help Desk,
SEO Arabic Expert ,PHP,C#,ASPX
Al alami st
gaza -jabalia, Gaza Strip
Palestine
Email :ahmed.almahallawi@gmail.com
DOB: 05/10/1984
التسميات: advance-csharp