مساء الخير
هتكلم النهارده شوية عن Dart وفي نهاية البوست هتلاقي challenge بسيطه لو حليتها فانت مش محتاج تقرا البوست.
مفهوم ال asynchronization في لغة Dart:
كتير من اللغات بتقدر تحقق مفهوم ال parallelism عن طريق انها تستخدم ال multithreading بمعنى انه يكون فيه اكتر من thread بيتشاركوا نفس المكان من ال memory وكل thread تشتغل على تاسك منفصله وبالتالي الوقت الكلي المستخدم لتنفيذ N من التاسكات في وجود N من ال threads هيساوي نفس الوقت المستخدم لتنفيذ تاسك واحده فقط وده طبعًا بيعلي السرعه والكفاءة.
للأسف Dart مش واحده من اللغات دي رغم انها بتديلك الإمكانية انك تعمل ده ولكن ده مش الشكل الافتراضي ليها ولا ده موطن قوة dart وده اللي بيصعب على Flutter بناء تطبيقات بتستخدم resources كبيره من ال cpu زي انك تعمل image processing لان النوعيه دي من التاسكات بتحتاج انها تستخدم كل cpu core ممكنه.
طيب ازاي Dart بتقدر تنفذ async tasks رغم كونها بتشتغل على thread واحده ؟
بتقدر تنفذ ده عن طريق استخدام event queue ينظم عملية دخول ال events بكل انواعها سواء كانت I/O event او cpu event او Future event وهنا بييجي دور ال event loop في انها تعمل processing للايفنت اللي عليه الدور لو كان sync فبتنفذه وتدخل على التاسك اللي بعده ولو كان Future فبتركنه لحد ما يحصلها hock trigger يقولها ان ال Future خلص ومستني processing.
من الاخر يعني Dart مش بتميز بين ال events ومش بتضطرك تكتب كود ولا تعمل مجهود علشان تقدر تنفذ async task لان ال event loop ذكيه كفايه انها تقدر تفهم انها مش محتاجه تستنى event ممكن ياخد ثواني على ما يحصل في حين انه لغات زي java و swift بيضطروك تكتب ال async task بطريقه معينه لانهم بيستخدموا ال multithreading فبيخلوا كل Async task تشتغل في thread منفصله علشان مايحصلش lock لل main thread وهي بتستنى ال Future انه يخلص.
بمعنى ان Dart مش بتحقق مفهوم ال parallelism ولكنها بتحقق مفهوم مشابه لل parallelism اسمه ال concurrency.
ال event loop بتتعامل مع التاسكات بالترتيب ده (من الأسرع للأبطأ)
1- sync task: print("task");
2- async microtask: Future.microtask(()=>print("microtask"));
3- async task: Future(()=>print("async task"));
بعد ما عرفت كل ده خليني اقولك ان Dart بتستخدم حاجه اسمها isolate وهي زي ال thread ولكنها مختلفه في ان كل isolate ليها dedicated memory خاصه بيها هي فقط وبتتيحلك انك تستخدم multi isolates سواء عن طريق ال low level كود من خلال spawn أو الأفضل تستخدم ال Function اللي وفرتها Flutter واللي هي compute ولكنها محدوده بعض الشئ في استخداماتها وبتحط عليك restrictions لانه زي ماتفقنا دي مش موطن قوة Dart.
وأخيراً حاول تحل ال challenge البسيطه دي علشان تتأكد انك فهمت كلامي أو اسألني فيه.
void main() async{
print("A");
await Future((){
print("B");
Future(()=>print("C"));
Future.microtask(()=>print("D"));
Future(()=>print("E"));
print("F");
});
print("G");
}
#flutter
#شرح
#منقول
Post #1904
3.68K
- ❤ 8
- 👍 4
- 👏 4
- 🔥 1
- 🥰 1
- 🤔 1