تعرف على التزامن (الـ Concurrency)

Mohammad Laifمنذ 5 سنوات

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

 

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

 

ملاحظة: هذه الدوره مختصه بالتزامن (concurrency) في نظام الاندرويد بلغة الجافا. اذا كنت تريد التعمق اكثر في موضوع التزامن فعليك بإلقاء نظره على التزامن في لغة الجافا.

 

ماهو الـ Sequential

قبل الخوض في معنى التزامن (الـ Concurrency) يجب علينا ان نفهم العكس له مادمنا نقوم بإستخدامه يومياً! وهو التسلسل او المتتابع (الـ Sequential) عباره عن اجراء العمليات بشكل متسلسل كالعد من الواحد الى العشرة. وفي البرمجة هو تشغيل الاسطر البرمجية سطر بعد سطر بشكل متسلسل كما بالصورة التالية:

 

ماذا لو اردنا تشغيل الاسطر في نفس الوقت؟ او نريد من السطر الاخير ان يعمل قبل الاول؟ في هذه الحالة تحتاج الى التزامن (الـ Concurrency).

 

ماهو الـ Concurrency
التزامن (الـ concurrent) هو وقوع حدثين في الوقت نفسه اي تزامن الاحداث. وفي البرمجة هو تشغيل اكثر من سطر برمجي في نفس الوقت تقريباً اي بعكس التسلسل (الـ Sequential) كما بالصورة التالية:

 

لماذا نحتاج الى التزامن

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

 

هل التزامن (الـ Concurrency) نفس التماثل (الـ Parallelism)

سؤال ربما يتبادر الى الذهن والاجابه هي: لا, فالـ Parallelism يحتاج الى وجود اكثر من معالج ليقوم بتقسيم المهمة الى مهام صغيرة وتشغيل كل واحدة منها في معالج منفصل وفي وقت واحد.

اما الـ Concurrency سابقاً (معالج واحد) فيستطيع خلق وهم لتشغيل اكثر من مهام في ان واحد وذلك بأستخدام حيله وهي التبديل بين المهام ونستطيع القول هنا انه يقوم بالـ Multitasking. اي انه يقوم بالمهمه A قليلاً ثم يذهب ويقوم بالمهمه B قليلاً (بسرعه الضوء - سرعة انتقال الكهرباء التي تتمثل كبيانات لنا بداخل قلب المعالج) مما يخلق وهم انه يقوم بمهمتين في نفس الوقت.

اما اذا كان المعالج يحتوي على اكثر من نواة (الـ Core) فنستطيع القول انه يستطيع القيام بعمل الـ Multithreading.

 

انواع التزامن

اذن نستطيع الفهم ان انواع التزامن هي كالتالي:

  • الـ Multiprocessing تزامن حقيقي عندما يوجد اكثر من معالج.
  • الـ Multithreading تزامن في المعالج متعدد الانويه (Cores), نستطيع الفهم انه تزامن بين الانويه.
  • الـ Multitasking تزامن وهمي, وهو التبديل بين اجراء المهام في كل لحظة من الزمن.

 

وفي هذة الدورة سنركز على النوع الثاني وهو الـ Multithreading في المعالجات متعددة الانوية بإجهزة هواتف الاندرويد.

 

في هذا الدرس تعرفنا على التزامن Concurrent والفرق بينه وبين المستلسل Sequential, وايضاً رأينا الاختلاف بين التزامن Concurrency والتماثل (او الموازاة) Parallelism. ورأينا انواع التزامن. في الدرس القادم سنتعرف اكثر على التزامن والاخطاء الشائعة التي تحدث عند استخدامه.

 

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

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

 

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

المحاضر

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

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

عن الدرس

10 إعجاب
8 متابع
0 مشاركة
5485 مشاهدات
منذ 5 سنوات

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

ahmad:

رغم قناعتي بان المحتوى الاجنبي غني بالمواضيع التخصصية الا ان موقع عالم البرمجة يعتبر من المواقع النادرة العربية الغنية بالمواضيع المتخصصة

شكرا لكم

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

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