الخيوط الحاسوبية (Threads)

Mohammad Laifمنذ 3 سنوات

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

 

في الدروس السابقه رأينا كيف ان نظام الاندريد ينشئ عملية خاصة لتطبيقك بداخل الـ Android Runtime ART كمفهوم صندوق رملي. في هذا الدرس سنرى ماذا يوجد بداخل تلك العمليات, الا وهي الخيوط الحاسوبية.

 

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

 

الخيط الحاسوبي
نستطيع القول بان الخيط الحاسوبي (Thread) هو حلقة الوصل بين تطبيقك (المهام التي يحتويها اي بين اسطرك البرمجيه) ووحدة المعالجة المركزية CPU للهاتف. فبدون خيط حاسوبي لاتستطيع تشغل اي سطر برمجي في تطبيقك, لذلك عندما تقوم بتشغيل تطبيقك يقوم نظام الاندرويد بأنشاء خيط حاسوبي مجاناً يسمى بالخيط الرئيسي, كالصورة التالي:

 

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

 

وظيفة الخيط الحاسوبي الرئيسي

  • هو المسؤل عن رسم وعرض العناصر الى المستخدم في الشاشة.
  • هو المسؤل عن رصد الاحداث التي يحدثها المستخدم للتطبيق (مثلاً قيام المستخدم بالنقر على عنصر Button).

 

ماذا يحدث لو اكثرنا استخدام الخيط الحاسوبي الرئيسي
من المعروف ان جميع شفراتك البرمجية يتم نقلها الى المعالج من خلال هذا الخيط. مثلاً تعاملك مع قواعد البيانات (كالـ SQLite او Room), استقبال وارسال البيانات الى الشبكة العنكبوتية, وما الى ذلك. اذا اكثرت المهام على هذا الخيط سيكون تطبيقك بطئ جداً وفي اغلب الاحيان سيتوقف عن العمل لمدة معينة من الوقت. التوقف لمدة خمس ثواني سيسبب للمستخدم ظهور هذة المشكلة:
application not responding" (ANR) dialog
وهذا سيدعو المستخدم الى اغلاق تطبيقك وحذفه من جهازه.

 

نقاط مهمة للتعامل مع الخيط الحاسوبي الرئيسي
توجد هناك نقطتان وهما:

  1. لاتقم بحجز هذا الخيط, وذلك من خلال اجراء بعض العمليات الطويلة او التي تتطلب جهد. كالاستعلام عن الالف الحقول في قاعدة البيانات او التعامل مع الشبكة العنكبوتية  عليه كالـ الخوادم  والـ API.
  2. لاتقم بمحاولة استخدام اي من عناصر الواجهه خارج هذا الخط. مثلاً تريد تحديث نص لعنصر TextView من خارج هذا الخيط كتحديثها من خلال خيوط اخرى (Background Threads) فهذا سيسبب تعطل تطبيقك.

 

الحل؟
هو انشاء خيط حاسوبي اخر لمهامك الثقيله. وهكذا يصبح لديك خطين حاسوبيين بداخل الـ Process الخاصة بتطبيقك, كالصورة التالية:


وتذكر ان الخيط الحاسوبي الرئيسي يطلق عليه المصطلحات التالية:

  • الـ Main Thread.
  • الـ UI Thread.

والخيوط الاخرى التي تنشئها تستطيع تسميتها كما تريد ولكن يطلق عليها بالمصطلحات التالية:

  • الـ Background Thread.
  • الـ Worker Thread.

 

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

 

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

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

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

المحاضر

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

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

عن الدرس

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

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

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

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