با عرض سلام خدمت کاربران محترم سایت پی وی لرن.
با جلسه ای دیگر از سری جلسات دوره آموزش زبان برنامه نویسی دارت Dart در خدمت شما هستیم.
در جلسه قصد داریم به آموزش برنامه نویسی موازی با استفاده از isolate ها در زبان دارت Dart بپردازیم.
با استفاده از isolate ها میتوانیم برنامه هایی بنویسیم که دستورات آن ها به صورت موازی و همزمان اجرا شوند.
در زبان های برنامه نویسی دیگر از نخ ها (Threads) برای این کار استفاده میکنیم. اما در زبان دارت، isolate ها این کار را برای ما انجام میدهند.
isolate ها همانطور که از نام ان ها پیداست، واحد های ایزوله شده کد در حال اجرا هستند.
تنها راه ارتباط بین این واحد ها ارسال پیام است.
کلاس Isolate در کتابخانه dart:isolate در دسترس است.
استفاده از isolate ها به برنامه ها امکان استفاده از مزایای پردازنده های چند هسته ای را میدهد.
اجازه دهید با یک مثال کار با 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!! |
خروجی که شما بر روی رایانه خود خواهید گرفت، متفاوت از خروجی من خواهد بود.
استفاده از Future نیز باعث میشود تا تابع مورد نظر به صورت async و موازی با ادامه کد های برنامه اجرا شود.
اما هدف اصلی Future برگرداندن مقدار یک تابع بعد از اجرای کامل آن تابع است.
در حالیکه که isolate ها مکانیزمی مستقل و گسترده تر برای ایجاد و پیاده سازی برنامه نویسی موازی هستند.
جلسه آموزش برنامه نویسی موازی با استفاده از isolate ها در زبان دارت نیز به پایان رسید.
در جلسه بعد به آموزش تست واحد در زبان دارت خواهیم پرداخت.