مقدمه عن Threading - سي شارب - مقـــالات - Top Coder
Welcome to our Site
الدخــول Or تسجـــيل
الخميس
2014-10-02
4:27 PM
تسجــــيل | دخـــول
الرئيسية » مقالات » سي شارب

مقدمه عن Threading
Threading in C Sharp
مقــــــــدمــه
تخيل انك تعمل في مكتبه , هذه المكتبه بها عشرة اقسام , وانت بصدد عمل اعادت ترتيب لكل اقسام المكتبه , فما ستفعله انك سوف تقوم بترتيب القسم الاول , ثم بعد ان تنتهي منه ستبدأ في القسم الثاني , ثم بعد ان تنتهي منه ستبدأ في القسم الثالث , وهكذا حتى تنتهي من ترتيب كل اقسام المكتبه .

لكن تخيل معي ان هناك شخص اخر سيقوم بترتيب المكتبه معك , فسيحدث الاتي , ستبدأ انت مثلا في القسم الاول , وفي نفس التوقيت يبدأ هو في القسم الثاني , ثم بعد ان تنتهي من القسم الاول ستبدأ في الثالث , حيث ان الثاني قام به الشخص الاخر , وبعد ان ينتهي هو من ترتيب الثاني سيبدأ في الرابع , هكذا حتى تنتهوا من الاقسام جميعها , ولعلك لاحظت الفرق بين الحالتين حيث تم تقسيم العمل فيما بينكم , بأن قمت باسناد اعمال معينه ليقوم بها مساعدك في حين تقوم انت باعمال اخرى , وهكذا الحال لو كان معك مساعدين او ثلاثه ... الخ .

وهذه هي فكره ال Multithreading في البرمجه عموما , حيث يتيح لنا هذا المفهوم بالقيام باكثر من عمليه على التوازي في نفس الوقت , واكبر مثال على ذلك انك تستطيع تشغل اكثر من برنامج داخل الويندوز في  نفس الوقت , فهذا يسمى Multithreading .
Multithreading in C Sharp
و كركن اساسي من لغة البرمجه سي شارب , فقد وفرت القدره على استخدام ال Threading لتنفيذ اكثر من كود في نفس الوقت , فالكود في الاساس ينفذ بالتوالي , اي يقوم الكومبايلر بتنفيذ سطر كود , ثم ينتقل الى السطر التالي حتى ينتهي منه فينتقل الى الثالث , ولا يستطيع ان يقوم البرنامج يتنفيذ سطر معين الا عندما ينتهي من تنفيذ السطر الحالي , كما هو حال رجل المكتبه , فهو يرتب الاقسام بالتوالي , ولا يستطيع ترتيب اكثر من قسم في نفس الوقت الا في حالة تواجد من يساعده في ذلك .

البرنامج في الاساس يحتوي على Thread رئيسي واحد , يقوم هو بكل المهام داخل البرنامج , وفي حالة استخدام Thread أخر يقوم المبرمج باعطاءه مهام معينه من خلال ال Thread الاساسي , وهكذا الحال مع استخدام العديد من ال Threads في البرنامج الواحد
تنفيذ الكود دون استخدام Threads
 
وكما نرى في الكود السابق فهناك دالتين الاولى تقوم بكتابة حرف X في الكونسول 1000 مرة , والثانيه تقوم بكتاية حرف Y 1000 مرة ايضا , ولك ان تتخيل كيف ستكون النتيجه , النتيجة ستكون كما في الصورة


حيث انه لم نستخدم اي Threads , لذا فسوف يقوم ال Thread الاساسي للبرنامج بالقيام بكل المهام بمفرده , فيقوم بتنفذ الداله الاولى WrteX , فيقوم بكتابه حرف ال X الف مرة , ثم يبدأ في تنفيذ الداله WriteY فيقوم بكتابة ال Y الف مرة , فهو قد قام بتنفيذ الدوال بالتوالي , فلا يوجد من يساعده في تنفيذ المهام .
تنفيذ الكود باستخدام Thread مساعد
 
في الكود السابق قمنا بإستخدام thread مساعد ليقوم هو بتنفيذ الداله الاولى WriteX -- ولكي نستخدم الكلاس Thread لابد من اضافة النيم سبيس System.Threading -- حيث يكون تنفيذ الكود كالتالي :
1- يقوم ال thread الاساسي للبرنامج بالدخول الى دالة ال main .
2- يقوم الاساسي بخلق thread جديد لمساعدته ويعطيه مهمة تنفيذ الداله الاولى WriteX .
3- يقوم الاساسي بتشغيل المساعد th.Start ليبدأ في تنفيذ عمله WriteX .
4- ينتقل الاساسي لتنفيذ باقي الكود وهو تنفيذ الداله WriteY .
5- وهنا يحدث تزامن بين الاثنين , حيث يعملان في نفس التوقيت على التوازي , فكل ثريد يقوم بتنفيذ مهمته ولذلك نجد تداخل الاثنين مع بعضهما كما في الصورة .


ختـــــــــــــام
وهكذا يمكننا ان نرى اهمية ال Thread في تنفيذ العمليات المختلفه بالتزامن مع بعضها البعض , ويمكن تطبيق ذلك على عدة حالات , فلو كانت لديك عمليه معينه تأخذ وقتا كبيرا , ففي حالة عدم استخدام ال thread فالبرنامج لن يستطيع القيام باي عمليه اخرى الا عندما ينتهي من تلك العمليه تمام , فمثلا لو كان البرنامج يقوم بالبحث عن ملفات معينه , فمن الطبيعي انه ياخذ وقتا في عملية البحث والاتيان بالنتائج , وسوف لن تستطيع القيام باي عمليه اخرى الا عندما ينتهي من البحث تماما , اما في حالة استخدام ال thread فانك تعطي عملية البحث ل thread يقوم به بالتزامن مع قيامك باي شئ اخر على نفس التطبيق .

وهناك الكثير من الحالات التي تقابل اي مطور ولابد له من استخدام ال Threading , فتحميل الملفات من الانترنت ياخذ وقتا , فيستخدم الثريد لتحميل الملف دون ان يتوقف البرنامج حتى ينتهي التحميل , وربما يقوم البرنامج بتحميل اكثر من ملف في نفس التوقيت مما يتطلب Thread خاص بكل ملف , وهكذا الامثله كتيره ومهمه , ولعل هذه مقدمة عن ذلك الموضوع وسوف نقوم لاحقا بشرح بعض الاجزاء المتقدمه في نفس السياق .
 Written by :  Mohammed Mahmoud
الفئة: سي شارب | أضاف: ham_mody2000 (2011-08-07 1:20 AM)
مشاهده: 1184 | تعليقات: 1 | الترتيب: 0.0/0


أترك تعليقك من خلال حسابك على الفيس بوك

تعليقات مشتركي الموقع

مجموع المقالات: 1
1 Mohammed Alsayed   (2011-08-07 2:34 AM)
الله يعطيك العافية اخوي محمد درس مفيد ورائع

الاسم *:
Email:
كود *:
طريقة الدخول
بحث
Our Facebook community

تم إطلاق صفحة توب كودر على الفيس بوك

Advertisment
الأحـــدث
hitstatus
Copyright Mohammed Mahmoud © 2014
إنشاء موقع مجاني с uCoz