مكونات الخيوط الحاسوبية (Thread)

Mohammad Laifمنذ 3 سنوات

بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

 

في الدرس السابق تعرفنا على الخيط الحاسوبي وفي هذا الدرس سنتعرف اكثر عليه من خلال فهم مكوناته.

 

لنفرض ان لدينا جهاز هاتف اندرويد به معالج ذو نواتين, ويدعم تعدد الخيوط. كما بالصورة التالية:

 

وقمنا بتشغيل احد التطبيقات كما بالصورة التالية:

الان لإجراء اي عملية في التطبيق نحتاج لربطه بالمعالج اليس كذلك؟ ولهذا نحتاج الى انشاء خيط حاسوبي. ومن حسن الحظ ان نظام الاندرويد ينشئ لنا خط حاسوبي افتراضي ويسمى Main Thread و UI Thread كما هو موضح بالشكل الاعلى. والان لفهم هذا الخيط الحاسوبي سنتطرق الى مكوناته في النقاط الاتيه.


مكونات الخيوط الحاسوبي (Threads)

والان لفهم الخيط الحاسوبي بشكل دقيق, نحتاج الى فهم مكوناته وهي كالتالي:

  • الـ Runnable.
  • الـ Callable.
  • الـ Future Object.
  • الـ Message.
  • الـ Handler.
  • الـ Message Queue.
  • الـ Looper.


الـ Runnable (نستطيع فهمه على انه Message كذلك)

عبارة عن واجهه Interface من خلالها نقوم بتغليف الشفرة التي نريد ارسالها على الخيط للمعالج. وتحتوي هذة الواجهة على دالة واحدة وهي run() نضع بداخلها الشفرة المراد تغليفها. ثم نقوم بارسال هذا الـ Runnable على الخيط الحاسوبي باستخدام Handler.

الـ Runnable عبارة عن كائن يغلف الشفرة البرمجية لإرسالها الى المعالج.

 

الـ Callable (سنقوم باستخدامه في الدروس المتقدمه)
الـ Callable مشابه للـ Runnable ولكن الفرق هو انه يستطيع ارجاع قيمة ما (بعكس الـ Runnable لايستطيع ارجاع اي قيمه) وتغلف تلك القيمة في عنصر مستقبلي.

 

الـ Future عنصر مستقبلي للبيانات (سنقوم باستخدامه في الدروس المتقدمه)
 تغلف القيمة التي يقوم الـ Callable بإرجاعها في عنصر من هذا نوع Future.

 

الـ Message

اي شئ ينقل الى الخيط الحاسوبي نستطيع تسميته بالـ Message (تستطيع فهمها على انها طبقه اخرى من الـ Abstraction بين الخيط الحاسوبي و كل ماتريد وضعه عليه). اي اننا نستطيع ان نضع بيانات بداخل Message ثم ارسالها الى الخيط الحاسوبي, ونستطيع كذلك وضع Runnable في الـ Message ثم نقلها الى الخيط الحاسوبي.

 

الـ Handler

لكل خيط حاسوبي يوجد Handler خاص به. ومن خلال الـ Handler نستطيع وضع الـ Runnable او ما يسمى بالـ Message على الخيط الحاسوبي (Thread) وذلك بوضعه بداخل الـ Message Queue. وايضاً الـ Handler يمكننا من نقل الـ Message من خيط حاسوبي الى اخر (نقل البيانات من الخيط الحاسوبي الخلفي الى الخيط الحاسوبي الرئيسي).
اي ان وظائف الـ Handler هي:

  • وضع البيانات على الخيط الحاسوبي.
  • ينقل البيانات بين الخيوط الحاسوبيه المختلفه (حلقة وصل بين الخيوط).

 

الـ Message Queue


اذا تم استلام عناصر Messages او Runnable من الـ Handler يأتي دور هذه الكلاس حيث يتضح من اسمها عملها Message Queue اي انها فقط تقوم بعمل List لهذه العناصر المستلمه والتي تحتوي على اسطرنا البرمجية لترتيب تشغيلها.

 

الـ Looper

عبارة عن كلاس مخصصة تقوم وظيفتها على تحريك و تشغيل الـ Runnable او Message في الخيط الحاسوبي (Thread) وابقائه نشط (تحريك الـ Message Queue). وايضاً من خلالها نستطيع جدولة الوقت لتشغيل الـ Runnalbe او Message اذا اردنا ذلك.

 

في هذا الدرس تعرفنا على مكونات الخيوط الحاسوبية. في الدرس القادم سنقوم بإنشاء خيط حاسوبي بسيط بأستخدام الكلاس الـ Thread والواجهة Runnable ثم في دروس متقدمة سنقوم باستخدام هذه الكائنات والكلاسات والواجهات بعمل العديد من الانماط لتشغيل المهام على خيوط حاسوبية خلفيه (Worker Thread, Background Thread) مختلفه عن الخيط الرئيسي (Main Thread, UI Thread). لاتقلق فبالتأكيد انك قمت باستخدام بعض من هذة الانماط امثال الـ AsyncTask و Loader وربما اخرى كـ Thread Pools وهو مايسمى بالـ Executor. ولكننا قبل الخوض فيها سنبدء بالنمط البدائي وهو استخدام كل من كلاسات الـ Thread و Looper و Handler معاً والتي تم بناء باقي الانماط من خلالها, ثم نمط مبسط منه ويسمى HandlerThreads.

 

المصادر والمراجع

للمزيد راجع درس المقدمة.
 

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

المحاضر

Mohammad Laif

محتوى الدورة

تمهيد
1 مقدمة
2 تعرف على التزامن (الـ Concurrency)
3 اخطاء التزامن (الـ Concurrency) الشائعة
العمليات Processes
1 الهيكلة الهندسية لبيئة نظام الاندرويد
2 طبقة الـ Android Runtime و العمليات Processes
3 انواع العمليات (Processes)
الخيوط الحاسوبية Threads
1 الخيوط الحاسوبية (Threads)
2 مكونات الخيوط الحاسوبية (Thread) الدرس الحالي
3 انشاء الخيط الحاسوبي
أنماط التصميم للخيوط الحاسوبية
1 انشاء نمط الـ Handler و Looper و Thread
2 انشاء نمط الـ HandlerThreads
3 ماهو نمط الـ Thread Pools (الـ Executors)
4 استخدام نمط الـ Thread Pools كـ Singleton
5 استخدام الـ Callable مع نمط الـ Thread Pools
6 انشاء بركة خيوط حاسوبية Thread Pools لتسريع قاعدة البيانات
7 انشاء نمط الـ AsyncTask
8 انشاء نمط الـ Loader
الـ Broadcasts
1 تعرف على الـ Broadcast Receiver
2 انشاء الـ Broadcast Receiver بشكل ثابت
3 انشاء الـ Broadcast Receiver بشكل ديناميكي
4 استخدام الـ Local Broadcast للتخاطب بين المكونات
الـ Services
1 تعرف على الـ Services
2 انشاء الـ Started Service
3 انشاء الـ Intent Service
4 انشاء الـ Bound Service
5 استخدام الـ ResultReceiver للتخاطب مع الـ Intent Service
6 استخدام الـ Broadcast للتخاطب مع الـ Started Service
الـ Alarm Manager
1 تعرف على الـ Alarm Manager
2 طرق استخدام الـ Alarm Manager
الـ Jobs
1 استخدام الـ Android JobSchedualer
2 استخدام الـ Firebase JobDispatcher
3 استخدام الـ WorkManager من حزمة JetPack

الكلمات الدليلية

عن الدرس

2 إعجاب
2 متابع
0 مشاركة
2149 مشاهدات
منذ 3 سنوات

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !