وراثت اولویت دار

وارونگی اولویت وضعیتی است که در آن یک تراکنش با اولویت بالا توسط یک کار با اولویت پایین به تأخیر می افتد زیرا وظیفه با اولویت پایین منبع مورد نیاز برای کار با اولویت بالا را در خود نگه می دارد. برای کاهش وارونگی اولویت، اندروید از اجرای رشته‌ها در اولویت‌های مختلف از طریق سه شکل مختلف وراثت اولویت پشتیبانی می‌کند: وراثت اولویت تراکنش، وراثت اولویت گره، و ارث بری اولویت بلادرنگ.

این صفحه این اشکال مختلف ارث بری اولویت را توضیح می دهد.

وراثت اولویت معامله

هنگام برقراری تماس بایندر همزمان، یک رشته با اولویت بالا می تواند توسط یک رشته با اولویت پایین مسدود شود تا زمانی که رشته با اولویت پایین پاسخی را ارسال کند. به عنوان مثال، یک رشته با مقدار خوب 19- می تواند توسط یک رشته با مقدار خوب پیش فرض 0 مسدود شود.

وراثت اولویت تراکنش این مشکل را برطرف می کند زیرا راننده بایندر به طور موقت اولویت رشته بایندر را که تراکنش را مدیریت می کند تغییر می دهد تا با اولویت تماس گیرنده مطابقت داشته باشد. هنگامی که تراکنش انجام شد، درایور بایندر اولویت رشته بایندر را به مقدار قبلی آن باز می گرداند.

وراثت اولویت گره

در برخی شرایط، مانند مواردی که نیاز به تأخیر کم دارند، اولویت تراکنش های ناهمزمان اهمیت دارد.

وراثت اولویت گره به شما امکان می دهد حداقل اولویتی را که تمام تراکنش های یک گره باید در آن اجرا شوند، پیکربندی کنید. پس از پیکربندی وراثت اولویت گره، تمام تراکنش های روی گره با این اولویت حداقل اجرا می شوند.

قوانین وراثت اولویت گره عبارتند از:

  • اگر تراکنش همزمان باشد، اولویت به max(min_node_priority, caller_priority); .

  • اگر تراکنش ناهمزمان باشد، اولویت به max(default_priority (nice 0), min_node_priority); .

وراثت اولویت گره را پیکربندی کنید

برای پیکربندی وراثت اولویت گره، از BBinder::setMinSchedulerPolicy استفاده کنید.

ارث بری با اولویت بلادرنگ

Android از خط‌مشی‌های زمان‌بندی هم‌زمان، مانند SCHED_FIFO ، استفاده می‌کند تا باعث شود رشته‌های مهم تأخیر کار خود را به موقع کامل کنند. علاوه بر این، برخی از کارهای حیاتی تأخیر اندروید بر دو یا چند فرآیند تقسیم می‌شوند.

وراثت اولویت بلادرنگ مانند مقادیر خوب عمل می کند، به جز:

  • وراثت اولویت بلادرنگ به طور پیش فرض غیرفعال است.
  • مقادیر اولویت زمان واقعی بیشتر اولویت بیشتری نسبت به مقادیر کوچکتر دارند.

وراثت با اولویت بلادرنگ را فعال کنید

وراثت اولویت بلادرنگ باید برای گره های جداگانه با استفاده از فراخوانی BBinder::setInheritRt(true) فعال شود.