حلقه رویداد در دارت و فلاتر
Summarize this content to 400 words in Persian Lang
این event loop در فلاتر (و دارت) بخش مهمی از نحوه عملکرد برنامه نویسی ناهمزمان است. نحوه اجرای کارآمد وظایف (مانند بهروزرسانیهای رابط کاربری، درخواستهای شبکه، تایمرها و غیره) بدون مسدود کردن رشته اصلی را مدیریت میکند. در اینجا یک تفکیک وجود دارد:
حلقه رویداد چگونه کار می کند:
Main Isolate: Flutter بیشتر کدهای برنامه از جمله رابط کاربری را در یک رشته به نام اصلی ایزوله اجرا می کند. در دارت، ایزوله ها زمینه های اجرایی جداگانه ای هستند که حافظه مشترکی ندارند اما از طریق ارسال پیام با هم ارتباط برقرار می کنند.
1. صف رویداد:
صف رویداد وظایفی را نگه می دارد که در انتظار اجرا هستند. این وظایف میتوانند رویدادهای ناهمزمان (مانند عملیات I/O) یا بهروزرسانیهای رابط کاربری باشند که باید پس از آماده شدن دادهها انجام شوند.
2. اجرای وظیفه:
حلقه رویداد به طور مداوم صف رویداد را بررسی می کند. هنگامی که ایزوله اصلی آزاد است (مشغول نیست)، وظیفه بعدی را از صف رویداد انتخاب می کند و آن را اجرا می کند. این از مسدود شدن رشته اصلی با کارهای وقت گیر جلوگیری می کند و به برنامه اجازه می دهد تا پاسخگو باقی بماند.
3. عملیات ناهمزمان:
هنگامی که از Dart's Future، async و کلمات کلیدی انتظار استفاده می کنید، به وظایف طولانی مدت (مانند درخواست های شبکه یا خواندن فایل ها) اجازه می دهید به صورت ناهمزمان اجرا شوند. این وظایف به صف رویداد اضافه می شوند و پس از اتمام کار، حلقه رویداد آن را انتخاب می کند و نتیجه را پردازش می کند.
4. وظایف کوچک:
علاوه بر صف رویداد، دارت یک صف میکروتسک نیز دارد. وظایف میکرو اولویت بالاتری دارند و قبل از هر کار عادی در صف رویداد اجرا می شوند. اینها معمولاً با استفاده از scheduleMicrotask اضافه می شوند.
نکات کلیدی:
حلقه رویداد تضمین میکند که کارهای طولانی مدت (مانند واکشی دادهها) با پردازش ناهمزمان، رابط کاربری برنامه را مسدود نمیکند.وظایفی مانند رندر رابط کاربری در ایزوله اصلی پردازش میشوند، در حالی که وظایف طولانیمدت را میتوان خارج از رشته اصلی از طریق ایزولهها یا بهعنوان عملیات همگام پردازش کرد.این برای ساخت برنامههای واکنشگرا در Flutter ضروری است، زیرا به برنامه اجازه میدهد بهروزرسانیهای رابط کاربری و کارهای ناهمزمان (مثلاً واکشی دادهها از سرور) را به آرامی انجام دهد.
این event loop
در فلاتر (و دارت) بخش مهمی از نحوه عملکرد برنامه نویسی ناهمزمان است. نحوه اجرای کارآمد وظایف (مانند بهروزرسانیهای رابط کاربری، درخواستهای شبکه، تایمرها و غیره) بدون مسدود کردن رشته اصلی را مدیریت میکند. در اینجا یک تفکیک وجود دارد:
حلقه رویداد چگونه کار می کند:
Main Isolate: Flutter بیشتر کدهای برنامه از جمله رابط کاربری را در یک رشته به نام اصلی ایزوله اجرا می کند. در دارت، ایزوله ها زمینه های اجرایی جداگانه ای هستند که حافظه مشترکی ندارند اما از طریق ارسال پیام با هم ارتباط برقرار می کنند.
1. صف رویداد:
صف رویداد وظایفی را نگه می دارد که در انتظار اجرا هستند. این وظایف میتوانند رویدادهای ناهمزمان (مانند عملیات I/O) یا بهروزرسانیهای رابط کاربری باشند که باید پس از آماده شدن دادهها انجام شوند.
2. اجرای وظیفه:
حلقه رویداد به طور مداوم صف رویداد را بررسی می کند. هنگامی که ایزوله اصلی آزاد است (مشغول نیست)، وظیفه بعدی را از صف رویداد انتخاب می کند و آن را اجرا می کند. این از مسدود شدن رشته اصلی با کارهای وقت گیر جلوگیری می کند و به برنامه اجازه می دهد تا پاسخگو باقی بماند.
3. عملیات ناهمزمان:
هنگامی که از Dart's Future، async و کلمات کلیدی انتظار استفاده می کنید، به وظایف طولانی مدت (مانند درخواست های شبکه یا خواندن فایل ها) اجازه می دهید به صورت ناهمزمان اجرا شوند. این وظایف به صف رویداد اضافه می شوند و پس از اتمام کار، حلقه رویداد آن را انتخاب می کند و نتیجه را پردازش می کند.
4. وظایف کوچک:
علاوه بر صف رویداد، دارت یک صف میکروتسک نیز دارد. وظایف میکرو اولویت بالاتری دارند و قبل از هر کار عادی در صف رویداد اجرا می شوند. اینها معمولاً با استفاده از scheduleMicrotask اضافه می شوند.
نکات کلیدی:
حلقه رویداد تضمین میکند که کارهای طولانی مدت (مانند واکشی دادهها) با پردازش ناهمزمان، رابط کاربری برنامه را مسدود نمیکند.
وظایفی مانند رندر رابط کاربری در ایزوله اصلی پردازش میشوند، در حالی که وظایف طولانیمدت را میتوان خارج از رشته اصلی از طریق ایزولهها یا بهعنوان عملیات همگام پردازش کرد.
این برای ساخت برنامههای واکنشگرا در Flutter ضروری است، زیرا به برنامه اجازه میدهد بهروزرسانیهای رابط کاربری و کارهای ناهمزمان (مثلاً واکشی دادهها از سرور) را به آرامی انجام دهد.