Coroutine Dispatcher

pexels photo 1181263.jpeg

Coroutine Dispatcher

خلينا متفقين انه اي تاسك لازم تتنفذ في thread معينه سواء ال thread ده main thread او اي background thread ثانية. وبما انه ال coroutines تعتبر بمثابة light weight thread تمثل طبقة أعلي فوق ال threading mechanism وبتسهلك عملية ال thread creation بكميات كبيرة جدا مقارنة بطرق ال threading القديمة.. نتيجة لما سبق شرحه فإنه لكي يتم تنفيذ ال coroutine لازم تتنفذ علي thread معينه.

طيب نيجي لل dispatcher.. علشان تفهم ال dispatcher كويس خليني أشبهلك ال dispatcher بظابط المرور اللي بيوقف في تقاطع طرق علشان ينظم حركة السيارات Coroutines اللي عايزه تمشي علشان تأدي مهام معينة مطلوبة منها، وبتمشي علي طريق محدد Thread .

طب نيجي لخصائص ضابط المرور dispatcher في التعامل مع السيارات coroutines  والطرق threads

  • ضابط المرور مش بيسوق السيارات ولكن هو بس بيقرر المفروض كل سيارة تمشي علي أي طريق ويضمن أنه مافيش سيارات تخبط في بعض.
  • كل سيارة بتمشي علي الطريق علشان تأدي مهمة معينة وده تمثل ال coroutine 
  • السيارات تعتبر lightweight وسيارات كتير جدا تقدر تسافر علي نفس الطريق، وده نفسه ال coroutines خفيفة وتقدر تنشئ الكثيير منها لتنفيذ مهام. ولكن ضابط لهم لتنظيم عميلة السير.
  • الطريق تمثل ال threads فكل طريق يسع الكثير من السيارات وله limited capacity
  • من غير الـ Dispatcher، العربيات (الكوروتينات) مش هتعرف تمشي على أنهي طريق (Thread).
  • ساعتها بعض الطرق هتتزحم وتتقفل (Blocked Threads)، وفي طرق تانية هتفضل فاضية من غير استخدام.
  • لكن مع وجود الـ Dispatcher، كل حاجة بتمشي بانسجام وتنظيم، زي شرطي المرور اللي بيخلي العربيات تتحرك بأمان وسلاسة من غير فوضى.

والمعني الحرفي لكلمه dispatcher هيا المرسِل أو الموزِّع فهو مسئول عن ارسال ال coroutine انها تتنفذ علي thread معينة.. وفيه عندنا 3 threads أساسيين هما كالتالي:

طيب بنبعتها فين وازاي.. بنبعتها مع ال coroutine builder زي ال launch or async