چند نخی در دارت Dart Multithreading
با استفاده از isolate ها میتوانیم برنامه هایی بنویسیم که دستورات آن ها به صورت موازی و همزمان اجرا شوند.
در زبان های برنامه نویسی دیگر از نخ ها (Threads) برای این کار استفاده میکنیم. اما در زبان دارت، isolate ها این کار را برای ما انجام میدهند.
isolate ها همانطور که از نام ان ها پیداست، واحد های ایزوله شده کد در حال اجرا هستند.
تنها راه ارتباط بین این واحد ها ارسال پیام است.
کلاس Isolate در کتابخانه dart:isolate در دسترس است.
استفاده از isolate ها به برنامه ها امکان استفاده از مزایای پردازنده های چند هسته ای را میدهد.
برنامه نویسی موازی با استفاده از isolate ها Dart Multithreading
اجازه دهید با یک مثال کار با isolate ها را به شما آموزش دهیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 | import 'dart:isolate'; void foo(var message){ print('execution from foo ... the message is :${message}'); } void main(){ Isolate.spawn(foo,'Hello!!'); Isolate.spawn(foo,'Greetings!!'); Isolate.spawn(foo,'Welcome!!'); print('execution from main1'); print('execution from main2'); print('execution from main3'); } |
متد spawn از کلاس isolate، تابع foo را به صورت موازی با سایر کد های برنامه اجرا میکند.
این متد دو پارامتر دارد:
- تابعی که آن را راه اندازی میکند
- یک شئ که به تابع راه اندازی شده ارسال میشود
الزامی به ارسال یک شئ نیست و میتوانیم آن را null بگذاریم.
در مثال بالا الزامی وجود ندارد که توابع foo و main به یک ترتیب اجرا شوند. حتی ممکن است تابع foo اصلا اجرا نشود.
همچنین هیچ تضمینی به ما داده نمیشود که دو تابع فوق چه زمانی اجرا میشوند.
با هر بار اجرای برنامه بالا، یک خروجی متفاوت دریافت خواهید کرد.
خروجی ۱:
1 2 3 4 | execution from main1 execution from main2 execution from main3 execution from foo ... the message is :Hello!! |
خروجی ۲:
1 2 3 4 5 6 | execution from main1 execution from main2 execution from main3 execution from foo ... the message is :Welcome!! execution from foo ... the message is :Hello!! execution from foo ... the message is :Greetings!! |
خروجی که شما بر روی رایانه خود خواهید گرفت، متفاوت از خروجی من خواهد بود.
Dart Multithreading
تفاوت Isolate و Future
استفاده از Future نیز باعث میشود تا تابع مورد نظر به صورت async و موازی با ادامه کد های برنامه اجرا شود.
اما هدف اصلی Future برگرداندن مقدار یک تابع بعد از اجرای کامل آن تابع است.
در حالیکه که isolate ها مکانیزمی مستقل و گسترده تر برای ایجاد و پیاده سازی برنامه نویسی موازی هستند.
آموزش کامل زبان برنامه نویسی دارت در برنامه اندرویدی ما:
دانلود نرم افزار اندرویدی آموزش زبان برنامه نویسی دارت از کافه بازار
Dart Multithreading