الموزعين الـ Dispatchers
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
في هذا الدرس سنتعرف على المرسلين او الموزعين Dispatchers والتي تكمن وظيفتهم في وضع الكروتين على الخيط الحاسوبي. ففي الدرسين السابقين تعرفنا على النطاقات Scopes والتي تحدد أماكن إنشاء الكروتين ثم تعرفنا على البنائين Builders والذي من خلالهم نستطيع بناء الكروتين. والآن حان الوقت لوضع الكروتينات على الخيط الحاسوبية باستخدام الموزعين\المرسلين Dispatchers.
ماذا ستقرئ في هذا الدرس
- المرسلين الـ Dispatchers.
- أنواع الـ Dispatchers.
- النوع الأول الـ Default.
- النوع الثاني الـ IO.
- النوع الثالث الـ Unconfined.
- النوع الرابع الـ Main.
- متى أستخدم هذه الأنواع.
- الدوال التأجيلية Suspending Functions والـ Dispatchers.
المرسلين الـ Dispatchers
في البداية قلنا ان الروتين المساعد يعيش بداخل الخيوط الحاسوبية ويستطيع التنقل بينهم. هنا تكمن وظيفة المرسلين Dispatchers فهم المسؤولون عن إرسال ووضع الكروتين في خيط حاسوبي ما أو نقله الى خيط آخر أن صح التعبير. نستطيع تحديد المرسل Dispatcher بشكل ظاهري Explicit وذلك بكتابة النوع الذي نريده او بشكل خفي Implicit وذلك من خلال جعل الأمر متروك في يد النطاقات Scopes.
أنواع الـ Dispatchers
النوع الأول الـ Default
هذا النوع يطبق بشكل ضمني أي لانحتاج الى كتابته ظاهرياً, إلا اذا اردنا ان نكون على درايه به. يستخدم هذا النوع للمهام الثقيلة والتي تتطلب جهد كبير من المعالج كالخوارزميات وما شابه ذلك. بالعادة هو يمثل بركة من الخيوط الحاسوبية عددها ٦٤ خيط حاسوبي (ماهو نمط الـ Thread Pools (الـ Executors)).
مثال برمجي:
GlobalScope.launch(Dispatchers.Default) { }
النوع الثاني الـ IO
أسم هذا النوع يمثل المدخل Input والمخرج Output. يستخدم هذا النوع لكل المهام التي تتطلب التعامل مع كيان آخر خارج عن التطبيق. مثلاً في اليد اليمنى يوجد تطبيق الاندرويد, وفي اليد اليسرى ربما يوجد نظام ملفات خارجي, قواعد بيانات, سيرفرات وما الى ذلك. يتميز هذا النوع بإنشاء بركة من الخيوط الحاسوبية كذلك, وفي داخلها يتم وضع الروتينات المساعدة.
مثال برمجي:
GlobalScope.launch(Dispatchers.IO) { }
النوع الثالث الـ Unconfined
أما هذا النوع يستخدم لوضع الكروتينات على أي خيط حاسوبي بدون تحديد. بالعادة لا ينصح باستخدامه فأنت لاتدري أين سيتم وضع الكاروتين, إلا إذا كنت لا تبالي.
مثال برمجي:
GlobalScope.launch(Dispatchers.Unconfined) { }
النوع الرابع الـ Main
أسم هذا النوع يمثل الخيط الحاسوبي الرئيسي Main Thread او بما يسمى Thread UI. فإذا أردنا وضع كروتين في الخيط الرئيسي نستخدم هذا النوع. مع الانتباه إلى أن هذا النوع متوفر في بيئة تطوير الاندرويد. ويجب مراعات الشفرة التي نريد تشغيلها على هذا الخيط بحيث تكون خفيفه جداً ولاتهلكه.
مثال برمجي:
GlobalScope.launch(Dispatchers.Main) { }
متى أستخدم هذه الأنواع
اذا كانت لديك مهمة تتطلب جهد كبير جداً كعملية خوارزمية بحث أو ترتيب لشئ ما, الحل الأمثل لها هو Default. ولكن بالعادة ستكثر من استخدام النوع IO فهو مناسب لعمل طلبات من السيرفرات API Requests وايضاً للتعامل مع قواعد البيانات أو قراءة الملفات وما الى ذلك من أمور اعتيادية. أما إذا كنت لا تهتم في أين سيتم وضع الكروتين فتستطيع استخدام Unconfined. وفي النهاية إذا كنت في حاجة لعمل مهام على الخيط الرئيسي مثلاً رسم شئ في شاشة المستخدم أو إظهار له نتيجه فسيكون النوع Main هو المناسب.
الدوال التأجيلية Suspending Functions والـ Dispatchers
بالنسبة للدوال التأجيلية سنتعرف عليها في الدرس القادم. المهم الان هو جزئية الـ Dispatchers فيصعب على الدوال التأجيلية تحديده. لذلك وجدت دوال تساعدنا على ذلك ومنها الدالة withContext والتي تسمح لك بتحديد المرسل Dispatcher بداخل هذه الدوال.
مثال برمجي:
// We are in: Main Thread.
val result: String = withContext(Dispatchers.IO) {
// Now we are in: Background Thread.
"Mohammad"
}
// We back again on: Main Thread with the result.
println(result)
الى هنا نصل الى نهاية هذا القسم "مكونات الكروتين". وفي القسم القادم سيكون هناك درس خاص عن الدوال التأجيلية.
المصادر
- كوتلن Docs.
محتوى الدورة
مقدمة | |
---|---|
1 | مقدمة |
الروتينات التعاونية | |
1 | نظرة عامة على الـ Coroutines |
2 | نظرة خاصة على الـ Coroutines في لغة الكوتلن |
3 | إنشاء الكروتين Coroutine |
مكونات الروتينات التعاونية | |
1 | النطاقات الـ Scopes |
2 | البنائين الـ Builders |
3 | الموزعين الـ Dispatchers الدرس الحالي |
الدوال التأجيلية | |
1 | الدوال التأجيلية Suspended Functions |
التيارات Streams | |
1 | القنوات Channels |
2 | التدفق Flow |
الكلمات الدليلية
عن الدرس
0 إعجاب |
1 متابع |
0 مشاركة |
1426 مشاهدات |
منذ 4 سنوات |
التعليقات (0)
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !